Repository: quarkiverse/quarkus-jdiameter
Branch: main
Commit: 9be0f1bad518
Files: 835
Total size: 7.0 MB
Directory structure:
gitextract_ummft7m9/
├── .github/
│ ├── CODEOWNERS
│ ├── dependabot.yml
│ ├── project.yml
│ └── workflows/
│ ├── build.yml
│ ├── deploy-snapshots.yml.disabled
│ ├── pre-release.yml
│ ├── quarkus-snapshot.yaml
│ ├── release-perform.yml
│ ├── release-prepare.yml
│ └── release.yml.disabled
├── .gitignore
├── LICENSE
├── README.md
├── core/
│ ├── docs/
│ │ └── sources-asciidoc/
│ │ └── src/
│ │ └── main/
│ │ └── asciidoc/
│ │ ├── Chapter-Introduction.adoc~
│ │ ├── Chapter-JDiameter.adoc~
│ │ ├── Chapter-MUX.adoc~
│ │ ├── Diameter_User_Guide.adoc~
│ │ ├── Section-Introduction-Message_Format.adoc~
│ │ ├── Section-JDiameter-Configuration.adoc~
│ │ ├── Section-JDiameter-Setup.adoc~
│ │ ├── Section-JDiameter-Source_Overview.adoc~
│ │ ├── Section-JDiameter-Validator-Configuration.adoc~
│ │ ├── Section-JDiameter-Validator-Source_Overview.adoc~
│ │ ├── Section-JDiameter-Validator.adoc~
│ │ ├── Section-MUX-Setup.adoc~
│ │ ├── Section-MUX-Source_Overview.adoc~
│ │ ├── js/
│ │ │ └── default.js~
│ │ └── stylesheets/
│ │ └── telestax.css~
│ ├── jdiameter/
│ │ ├── api/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── jdiameter/
│ │ │ └── api/
│ │ │ ├── Answer.java
│ │ │ ├── ApplicationAlreadyUseException.java
│ │ │ ├── ApplicationId.java
│ │ │ ├── Avp.java
│ │ │ ├── AvpDataException.java
│ │ │ ├── AvpSet.java
│ │ │ ├── BaseSession.java
│ │ │ ├── Configuration.java
│ │ │ ├── ConfigurationListener.java
│ │ │ ├── DisconnectCause.java
│ │ │ ├── EventListener.java
│ │ │ ├── IllegalDiameterStateException.java
│ │ │ ├── InternalException.java
│ │ │ ├── LocalAction.java
│ │ │ ├── Message.java
│ │ │ ├── MetaData.java
│ │ │ ├── Mode.java
│ │ │ ├── MutableConfiguration.java
│ │ │ ├── MutablePeerTable.java
│ │ │ ├── Network.java
│ │ │ ├── NetworkReqListener.java
│ │ │ ├── OverloadException.java
│ │ │ ├── OverloadListener.java
│ │ │ ├── OverloadManager.java
│ │ │ ├── Peer.java
│ │ │ ├── PeerState.java
│ │ │ ├── PeerStateListener.java
│ │ │ ├── PeerTable.java
│ │ │ ├── PeerTableListener.java
│ │ │ ├── RawSession.java
│ │ │ ├── Realm.java
│ │ │ ├── RealmTable.java
│ │ │ ├── Request.java
│ │ │ ├── ResultCode.java
│ │ │ ├── RouteException.java
│ │ │ ├── Selector.java
│ │ │ ├── Session.java
│ │ │ ├── SessionFactory.java
│ │ │ ├── Stack.java
│ │ │ ├── StackManager.java
│ │ │ ├── StackType.java
│ │ │ ├── Statistic.java
│ │ │ ├── StatisticRecord.java
│ │ │ ├── URI.java
│ │ │ ├── Wrapper.java
│ │ │ ├── acc/
│ │ │ │ ├── ClientAccSession.java
│ │ │ │ ├── ClientAccSessionListener.java
│ │ │ │ ├── ServerAccSession.java
│ │ │ │ ├── ServerAccSessionListener.java
│ │ │ │ └── events/
│ │ │ │ ├── AccountAnswer.java
│ │ │ │ └── AccountRequest.java
│ │ │ ├── annotation/
│ │ │ │ ├── AvpDscr.java
│ │ │ │ ├── AvpFlag.java
│ │ │ │ ├── AvpType.java
│ │ │ │ ├── Child.java
│ │ │ │ ├── CommandDscr.java
│ │ │ │ ├── CommandFlag.java
│ │ │ │ ├── Getter.java
│ │ │ │ └── Setter.java
│ │ │ ├── app/
│ │ │ │ ├── AppAnswerEvent.java
│ │ │ │ ├── AppEvent.java
│ │ │ │ ├── AppRequestEvent.java
│ │ │ │ ├── AppSession.java
│ │ │ │ ├── State.java
│ │ │ │ ├── StateChangeListener.java
│ │ │ │ ├── StateEvent.java
│ │ │ │ └── StateMachine.java
│ │ │ ├── auth/
│ │ │ │ ├── ClientAuthSession.java
│ │ │ │ ├── ClientAuthSessionListener.java
│ │ │ │ ├── ServerAuthSession.java
│ │ │ │ ├── ServerAuthSessionListener.java
│ │ │ │ └── events/
│ │ │ │ ├── AbortSessionAnswer.java
│ │ │ │ ├── AbortSessionRequest.java
│ │ │ │ ├── ReAuthAnswer.java
│ │ │ │ ├── ReAuthRequest.java
│ │ │ │ ├── SessionTermAnswer.java
│ │ │ │ └── SessionTermRequest.java
│ │ │ ├── cca/
│ │ │ │ ├── CCASession.java
│ │ │ │ ├── ClientCCASession.java
│ │ │ │ ├── ClientCCASessionListener.java
│ │ │ │ ├── ServerCCASession.java
│ │ │ │ ├── ServerCCASessionListener.java
│ │ │ │ └── events/
│ │ │ │ ├── JCreditControlAnswer.java
│ │ │ │ └── JCreditControlRequest.java
│ │ │ ├── cxdx/
│ │ │ │ ├── ClientCxDxSession.java
│ │ │ │ ├── ClientCxDxSessionListener.java
│ │ │ │ ├── ServerCxDxSession.java
│ │ │ │ ├── ServerCxDxSessionListener.java
│ │ │ │ └── events/
│ │ │ │ ├── JLocationInfoAnswer.java
│ │ │ │ ├── JLocationInfoRequest.java
│ │ │ │ ├── JMultimediaAuthAnswer.java
│ │ │ │ ├── JMultimediaAuthRequest.java
│ │ │ │ ├── JPushProfileAnswer.java
│ │ │ │ ├── JPushProfileRequest.java
│ │ │ │ ├── JRegistrationTerminationAnswer.java
│ │ │ │ ├── JRegistrationTerminationRequest.java
│ │ │ │ ├── JServerAssignmentAnswer.java
│ │ │ │ ├── JServerAssignmentRequest.java
│ │ │ │ ├── JUserAuthorizationAnswer.java
│ │ │ │ └── JUserAuthorizationRequest.java
│ │ │ ├── gq/
│ │ │ │ ├── ClientGqSessionListener.java
│ │ │ │ ├── GqClientSession.java
│ │ │ │ ├── GqServerSession.java
│ │ │ │ └── ServerGqSessionListener.java
│ │ │ ├── gx/
│ │ │ │ ├── ClientGxSession.java
│ │ │ │ ├── ClientGxSessionListener.java
│ │ │ │ ├── ServerGxSession.java
│ │ │ │ ├── ServerGxSessionListener.java
│ │ │ │ └── events/
│ │ │ │ ├── GxCreditControlAnswer.java
│ │ │ │ ├── GxCreditControlRequest.java
│ │ │ │ ├── GxReAuthAnswer.java
│ │ │ │ └── GxReAuthRequest.java
│ │ │ ├── rf/
│ │ │ │ ├── ClientRfSession.java
│ │ │ │ ├── ClientRfSessionListener.java
│ │ │ │ ├── ServerRfSession.java
│ │ │ │ ├── ServerRfSessionListener.java
│ │ │ │ └── events/
│ │ │ │ ├── RfAccountingAnswer.java
│ │ │ │ └── RfAccountingRequest.java
│ │ │ ├── ro/
│ │ │ │ ├── ClientRoSession.java
│ │ │ │ ├── ClientRoSessionListener.java
│ │ │ │ ├── ServerRoSession.java
│ │ │ │ ├── ServerRoSessionListener.java
│ │ │ │ └── events/
│ │ │ │ ├── RoCreditControlAnswer.java
│ │ │ │ └── RoCreditControlRequest.java
│ │ │ ├── rx/
│ │ │ │ ├── ClientRxSession.java
│ │ │ │ ├── ClientRxSessionListener.java
│ │ │ │ ├── ServerRxSession.java
│ │ │ │ ├── ServerRxSessionListener.java
│ │ │ │ └── events/
│ │ │ │ ├── RxAAAnswer.java
│ │ │ │ ├── RxAARequest.java
│ │ │ │ ├── RxAbortSessionAnswer.java
│ │ │ │ ├── RxAbortSessionRequest.java
│ │ │ │ ├── RxReAuthAnswer.java
│ │ │ │ ├── RxReAuthRequest.java
│ │ │ │ ├── RxSessionTermAnswer.java
│ │ │ │ └── RxSessionTermRequest.java
│ │ │ ├── s13/
│ │ │ │ ├── ClientS13Session.java
│ │ │ │ ├── ClientS13SessionListener.java
│ │ │ │ ├── ServerS13Session.java
│ │ │ │ ├── ServerS13SessionListener.java
│ │ │ │ └── events/
│ │ │ │ ├── JMEIdentityCheckAnswer.java
│ │ │ │ └── JMEIdentityCheckRequest.java
│ │ │ ├── s6a/
│ │ │ │ ├── ClientS6aSession.java
│ │ │ │ ├── ClientS6aSessionListener.java
│ │ │ │ ├── ServerS6aSession.java
│ │ │ │ ├── ServerS6aSessionListener.java
│ │ │ │ └── events/
│ │ │ │ ├── JAuthenticationInformationAnswer.java
│ │ │ │ ├── JAuthenticationInformationRequest.java
│ │ │ │ ├── JCancelLocationAnswer.java
│ │ │ │ ├── JCancelLocationRequest.java
│ │ │ │ ├── JDeleteSubscriberDataAnswer.java
│ │ │ │ ├── JDeleteSubscriberDataRequest.java
│ │ │ │ ├── JInsertSubscriberDataAnswer.java
│ │ │ │ ├── JInsertSubscriberDataRequest.java
│ │ │ │ ├── JNotifyAnswer.java
│ │ │ │ ├── JNotifyRequest.java
│ │ │ │ ├── JPurgeUEAnswer.java
│ │ │ │ ├── JPurgeUERequest.java
│ │ │ │ ├── JResetAnswer.java
│ │ │ │ ├── JResetRequest.java
│ │ │ │ ├── JUpdateLocationAnswer.java
│ │ │ │ └── JUpdateLocationRequest.java
│ │ │ ├── sh/
│ │ │ │ ├── ClientShSession.java
│ │ │ │ ├── ClientShSessionListener.java
│ │ │ │ ├── ServerShSession.java
│ │ │ │ ├── ServerShSessionListener.java
│ │ │ │ └── events/
│ │ │ │ ├── ProfileUpdateAnswer.java
│ │ │ │ ├── ProfileUpdateRequest.java
│ │ │ │ ├── PushNotificationAnswer.java
│ │ │ │ ├── PushNotificationRequest.java
│ │ │ │ ├── SubscribeNotificationsAnswer.java
│ │ │ │ ├── SubscribeNotificationsRequest.java
│ │ │ │ ├── UserDataAnswer.java
│ │ │ │ └── UserDataRequest.java
│ │ │ ├── slg/
│ │ │ │ ├── ClientSLgSession.java
│ │ │ │ ├── ClientSLgSessionListener.java
│ │ │ │ ├── ServerSLgSession.java
│ │ │ │ ├── ServerSLgSessionListener.java
│ │ │ │ └── events/
│ │ │ │ ├── LocationReportAnswer.java
│ │ │ │ ├── LocationReportRequest.java
│ │ │ │ ├── ProvideLocationAnswer.java
│ │ │ │ └── ProvideLocationRequest.java
│ │ │ ├── slh/
│ │ │ │ ├── ClientSLhSession.java
│ │ │ │ ├── ClientSLhSessionListener.java
│ │ │ │ ├── ServerSLhSession.java
│ │ │ │ ├── ServerSLhSessionListener.java
│ │ │ │ └── events/
│ │ │ │ ├── LCSRoutingInfoAnswer.java
│ │ │ │ └── LCSRoutingInfoRequest.java
│ │ │ └── validation/
│ │ │ ├── AvpNotAllowedException.java
│ │ │ ├── AvpRepresentation.java
│ │ │ ├── Dictionary.java
│ │ │ ├── MessageRepresentation.java
│ │ │ └── ValidatorLevel.java
│ │ ├── impl/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── org/
│ │ │ │ │ └── jdiameter/
│ │ │ │ │ ├── client/
│ │ │ │ │ │ ├── api/
│ │ │ │ │ │ │ ├── IAnswer.java
│ │ │ │ │ │ │ ├── IAssembler.java
│ │ │ │ │ │ │ ├── IContainer.java
│ │ │ │ │ │ │ ├── IEventListener.java
│ │ │ │ │ │ │ ├── IMessage.java
│ │ │ │ │ │ │ ├── IMetaData.java
│ │ │ │ │ │ │ ├── IRequest.java
│ │ │ │ │ │ │ ├── ISession.java
│ │ │ │ │ │ │ ├── ISessionFactory.java
│ │ │ │ │ │ │ ├── StackState.java
│ │ │ │ │ │ │ ├── annotation/
│ │ │ │ │ │ │ │ ├── IRecoder.java
│ │ │ │ │ │ │ │ └── RecoderException.java
│ │ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ │ ├── IPeer.java
│ │ │ │ │ │ │ │ ├── IPeerTable.java
│ │ │ │ │ │ │ │ ├── IRealm.java
│ │ │ │ │ │ │ │ └── IRealmTable.java
│ │ │ │ │ │ │ ├── fsm/
│ │ │ │ │ │ │ │ ├── EventTypes.java
│ │ │ │ │ │ │ │ ├── ExecutorFactory.java
│ │ │ │ │ │ │ │ ├── FsmEvent.java
│ │ │ │ │ │ │ │ ├── IContext.java
│ │ │ │ │ │ │ │ ├── IFsmFactory.java
│ │ │ │ │ │ │ │ └── IStateMachine.java
│ │ │ │ │ │ │ ├── io/
│ │ │ │ │ │ │ │ ├── IConnection.java
│ │ │ │ │ │ │ │ ├── IConnectionListener.java
│ │ │ │ │ │ │ │ ├── ITransportLayerFactory.java
│ │ │ │ │ │ │ │ ├── NotInitializedException.java
│ │ │ │ │ │ │ │ ├── TransportError.java
│ │ │ │ │ │ │ │ └── TransportException.java
│ │ │ │ │ │ │ ├── parser/
│ │ │ │ │ │ │ │ ├── IElementParser.java
│ │ │ │ │ │ │ │ ├── IMessageParser.java
│ │ │ │ │ │ │ │ └── ParseException.java
│ │ │ │ │ │ │ └── router/
│ │ │ │ │ │ │ └── IRouter.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ ├── AbstractStateChangeListener.java
│ │ │ │ │ │ ├── BaseSessionImpl.java
│ │ │ │ │ │ ├── DictionarySingleton.java
│ │ │ │ │ │ ├── MessageUtility.java
│ │ │ │ │ │ ├── MetaDataImpl.java
│ │ │ │ │ │ ├── RawSessionImpl.java
│ │ │ │ │ │ ├── SessionFactoryImpl.java
│ │ │ │ │ │ ├── SessionImpl.java
│ │ │ │ │ │ ├── StackImpl.java
│ │ │ │ │ │ ├── StackImplMBean.java
│ │ │ │ │ │ ├── VersionProperties.java
│ │ │ │ │ │ ├── annotation/
│ │ │ │ │ │ │ ├── Recoder.java
│ │ │ │ │ │ │ ├── UnknownAvp.java
│ │ │ │ │ │ │ ├── Value.java
│ │ │ │ │ │ │ └── internal/
│ │ │ │ │ │ │ ├── ClassInfo.java
│ │ │ │ │ │ │ ├── ConstructorInfo.java
│ │ │ │ │ │ │ ├── MethodInfo.java
│ │ │ │ │ │ │ └── Storage.java
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── acc/
│ │ │ │ │ │ │ │ ├── ClientAccSessionDataLocalImpl.java
│ │ │ │ │ │ │ │ ├── ClientAccSessionImpl.java
│ │ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ │ └── IClientAccSessionData.java
│ │ │ │ │ │ │ ├── auth/
│ │ │ │ │ │ │ │ ├── ClientAuthSessionDataLocalImpl.java
│ │ │ │ │ │ │ │ ├── ClientAuthSessionImpl.java
│ │ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ │ └── IClientAuthSessionData.java
│ │ │ │ │ │ │ ├── cca/
│ │ │ │ │ │ │ │ ├── ClientCCASessionDataLocalImpl.java
│ │ │ │ │ │ │ │ ├── ClientCCASessionImpl.java
│ │ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ │ └── IClientCCASessionData.java
│ │ │ │ │ │ │ ├── cxdx/
│ │ │ │ │ │ │ │ ├── ClientCxDxSessionDataLocalImpl.java
│ │ │ │ │ │ │ │ ├── CxDxClientSessionImpl.java
│ │ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ │ └── IClientCxDxSessionData.java
│ │ │ │ │ │ │ ├── gq/
│ │ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ │ └── GqClientSessionImpl.java
│ │ │ │ │ │ │ ├── gx/
│ │ │ │ │ │ │ │ ├── ClientGxSessionDataLocalImpl.java
│ │ │ │ │ │ │ │ ├── ClientGxSessionImpl.java
│ │ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ │ └── IClientGxSessionData.java
│ │ │ │ │ │ │ ├── rf/
│ │ │ │ │ │ │ │ ├── ClientRfSessionDataLocalImpl.java
│ │ │ │ │ │ │ │ ├── ClientRfSessionImpl.java
│ │ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ │ └── IClientRfSessionData.java
│ │ │ │ │ │ │ ├── ro/
│ │ │ │ │ │ │ │ ├── ClientRoSessionDataLocalImpl.java
│ │ │ │ │ │ │ │ ├── ClientRoSessionImpl.java
│ │ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ │ └── IClientRoSessionData.java
│ │ │ │ │ │ │ ├── rx/
│ │ │ │ │ │ │ │ ├── ClientRxSessionDataLocalImpl.java
│ │ │ │ │ │ │ │ ├── ClientRxSessionImpl.java
│ │ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ │ └── IClientRxSessionData.java
│ │ │ │ │ │ │ ├── s13/
│ │ │ │ │ │ │ │ ├── ClientS13SessionDataLocalImpl.java
│ │ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ │ ├── IClientS13SessionData.java
│ │ │ │ │ │ │ │ └── S13ClientSessionImpl.java
│ │ │ │ │ │ │ ├── s6a/
│ │ │ │ │ │ │ │ ├── ClientS6aSessionDataLocalImpl.java
│ │ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ │ ├── IClientS6aSessionData.java
│ │ │ │ │ │ │ │ └── S6aClientSessionImpl.java
│ │ │ │ │ │ │ ├── sh/
│ │ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ │ ├── IShClientSessionData.java
│ │ │ │ │ │ │ │ ├── ShClientSessionDataLocalImpl.java
│ │ │ │ │ │ │ │ └── ShClientSessionImpl.java
│ │ │ │ │ │ │ ├── slg/
│ │ │ │ │ │ │ │ ├── ClientSLgSessionDataLocalImpl.java
│ │ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ │ ├── IClientSLgSessionData.java
│ │ │ │ │ │ │ │ └── SLgClientSessionImpl.java
│ │ │ │ │ │ │ └── slh/
│ │ │ │ │ │ │ ├── ClientSLhSessionDataLocalImpl.java
│ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ ├── IClientSLhSessionData.java
│ │ │ │ │ │ │ └── SLhClientSessionImpl.java
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ ├── PeerImpl.java
│ │ │ │ │ │ │ ├── PeerTableImpl.java
│ │ │ │ │ │ │ ├── RealmImpl.java
│ │ │ │ │ │ │ └── RealmTableImpl.java
│ │ │ │ │ │ ├── fsm/
│ │ │ │ │ │ │ ├── FsmFactoryImpl.java
│ │ │ │ │ │ │ ├── FsmState.java
│ │ │ │ │ │ │ └── PeerFSMImpl.java
│ │ │ │ │ │ ├── helpers/
│ │ │ │ │ │ │ ├── AppConfiguration.java
│ │ │ │ │ │ │ ├── AssemblerImpl.java
│ │ │ │ │ │ │ ├── EmptyConfiguration.java
│ │ │ │ │ │ │ ├── ExtensionPoint.java
│ │ │ │ │ │ │ ├── IPConverter.java
│ │ │ │ │ │ │ ├── Loggers.java
│ │ │ │ │ │ │ ├── Ordinal.java
│ │ │ │ │ │ │ ├── Parameters.java
│ │ │ │ │ │ │ ├── UIDGenerator.java
│ │ │ │ │ │ │ └── XMLConfiguration.java
│ │ │ │ │ │ ├── parser/
│ │ │ │ │ │ │ ├── AvpImpl.java
│ │ │ │ │ │ │ ├── AvpSetImpl.java
│ │ │ │ │ │ │ ├── ElementParser.java
│ │ │ │ │ │ │ ├── MessageImpl.java
│ │ │ │ │ │ │ └── MessageParser.java
│ │ │ │ │ │ ├── router/
│ │ │ │ │ │ │ ├── RouterImpl.java
│ │ │ │ │ │ │ ├── WeightedLeastConnectionsRouter.java
│ │ │ │ │ │ │ └── WeightedRoundRobinRouter.java
│ │ │ │ │ │ └── transport/
│ │ │ │ │ │ ├── TransportLayerFactory.java
│ │ │ │ │ │ ├── tcp/
│ │ │ │ │ │ │ ├── TCPClientConnection.java
│ │ │ │ │ │ │ ├── TCPTransportClient.java
│ │ │ │ │ │ │ └── netty/
│ │ │ │ │ │ │ ├── DiameterMessageDecoder.java
│ │ │ │ │ │ │ ├── DiameterMessageEncoder.java
│ │ │ │ │ │ │ ├── DiameterMessageHandler.java
│ │ │ │ │ │ │ ├── TCPClientConnection.java
│ │ │ │ │ │ │ └── TCPTransportClient.java
│ │ │ │ │ │ └── tls/
│ │ │ │ │ │ ├── TLSClientConnection.java
│ │ │ │ │ │ ├── TLSTransportClient.java
│ │ │ │ │ │ ├── TLSUtils.java
│ │ │ │ │ │ └── netty/
│ │ │ │ │ │ ├── DiameterMessageDecoder.java
│ │ │ │ │ │ ├── DiameterMessageEncoder.java
│ │ │ │ │ │ ├── DiameterMessageHandler.java
│ │ │ │ │ │ ├── InbandSecurityHandler.java
│ │ │ │ │ │ ├── SslContextFactory.java
│ │ │ │ │ │ ├── StartTlsClientHandler.java
│ │ │ │ │ │ ├── StartTlsInitiator.java
│ │ │ │ │ │ ├── StartTlsServerHandler.java
│ │ │ │ │ │ ├── TLSClientConnection.java
│ │ │ │ │ │ └── TLSTransportClient.java
│ │ │ │ │ ├── common/
│ │ │ │ │ │ ├── api/
│ │ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ │ ├── AppSessionDataLocalImpl.java
│ │ │ │ │ │ │ │ ├── IAppSessionData.java
│ │ │ │ │ │ │ │ ├── IAppSessionDataFactory.java
│ │ │ │ │ │ │ │ ├── IAppSessionFactory.java
│ │ │ │ │ │ │ │ ├── IAppSessionState.java
│ │ │ │ │ │ │ │ ├── acc/
│ │ │ │ │ │ │ │ │ ├── ClientAccSessionState.java
│ │ │ │ │ │ │ │ │ ├── IAccMessageFactory.java
│ │ │ │ │ │ │ │ │ ├── IAccSessionData.java
│ │ │ │ │ │ │ │ │ ├── IAccSessionFactory.java
│ │ │ │ │ │ │ │ │ ├── IClientAccActionContext.java
│ │ │ │ │ │ │ │ │ ├── IServerAccActionContext.java
│ │ │ │ │ │ │ │ │ └── ServerAccSessionState.java
│ │ │ │ │ │ │ │ ├── auth/
│ │ │ │ │ │ │ │ │ ├── ClientAuthSessionState.java
│ │ │ │ │ │ │ │ │ ├── IAuthMessageFactory.java
│ │ │ │ │ │ │ │ │ ├── IAuthSessionData.java
│ │ │ │ │ │ │ │ │ ├── IAuthSessionFactory.java
│ │ │ │ │ │ │ │ │ ├── IClientAuthActionContext.java
│ │ │ │ │ │ │ │ │ ├── IServerAuthActionContext.java
│ │ │ │ │ │ │ │ │ └── ServerAuthSessionState.java
│ │ │ │ │ │ │ │ ├── cca/
│ │ │ │ │ │ │ │ │ ├── ClientCCASessionState.java
│ │ │ │ │ │ │ │ │ ├── ICCAMessageFactory.java
│ │ │ │ │ │ │ │ │ ├── ICCASessionData.java
│ │ │ │ │ │ │ │ │ ├── ICCASessionFactory.java
│ │ │ │ │ │ │ │ │ ├── IClientCCASessionContext.java
│ │ │ │ │ │ │ │ │ ├── IServerCCASessionContext.java
│ │ │ │ │ │ │ │ │ └── ServerCCASessionState.java
│ │ │ │ │ │ │ │ ├── cxdx/
│ │ │ │ │ │ │ │ │ ├── CxDxSessionState.java
│ │ │ │ │ │ │ │ │ ├── ICxDxMessageFactory.java
│ │ │ │ │ │ │ │ │ ├── ICxDxSessionData.java
│ │ │ │ │ │ │ │ │ └── ICxDxSessionFactory.java
│ │ │ │ │ │ │ │ ├── gx/
│ │ │ │ │ │ │ │ │ ├── ClientGxSessionState.java
│ │ │ │ │ │ │ │ │ ├── IClientGxSessionContext.java
│ │ │ │ │ │ │ │ │ ├── IGxMessageFactory.java
│ │ │ │ │ │ │ │ │ ├── IGxSessionData.java
│ │ │ │ │ │ │ │ │ ├── IGxSessionFactory.java
│ │ │ │ │ │ │ │ │ ├── IServerGxSessionContext.java
│ │ │ │ │ │ │ │ │ └── ServerGxSessionState.java
│ │ │ │ │ │ │ │ ├── rf/
│ │ │ │ │ │ │ │ │ ├── ClientRfSessionState.java
│ │ │ │ │ │ │ │ │ ├── IClientRfActionContext.java
│ │ │ │ │ │ │ │ │ ├── IRfSessionData.java
│ │ │ │ │ │ │ │ │ ├── IRfSessionFactory.java
│ │ │ │ │ │ │ │ │ ├── IServerRfActionContext.java
│ │ │ │ │ │ │ │ │ └── ServerRfSessionState.java
│ │ │ │ │ │ │ │ ├── ro/
│ │ │ │ │ │ │ │ │ ├── ClientRoSessionState.java
│ │ │ │ │ │ │ │ │ ├── IClientRoSessionContext.java
│ │ │ │ │ │ │ │ │ ├── IRoMessageFactory.java
│ │ │ │ │ │ │ │ │ ├── IRoSessionData.java
│ │ │ │ │ │ │ │ │ ├── IRoSessionFactory.java
│ │ │ │ │ │ │ │ │ ├── IServerRoSessionContext.java
│ │ │ │ │ │ │ │ │ └── ServerRoSessionState.java
│ │ │ │ │ │ │ │ ├── rx/
│ │ │ │ │ │ │ │ │ ├── ClientRxSessionState.java
│ │ │ │ │ │ │ │ │ ├── IClientRxSessionContext.java
│ │ │ │ │ │ │ │ │ ├── IRxMessageFactory.java
│ │ │ │ │ │ │ │ │ ├── IRxSessionData.java
│ │ │ │ │ │ │ │ │ ├── IRxSessionFactory.java
│ │ │ │ │ │ │ │ │ ├── IServerRxSessionContext.java
│ │ │ │ │ │ │ │ │ └── ServerRxSessionState.java
│ │ │ │ │ │ │ │ ├── s13/
│ │ │ │ │ │ │ │ │ ├── IS13MessageFactory.java
│ │ │ │ │ │ │ │ │ ├── IS13SessionData.java
│ │ │ │ │ │ │ │ │ ├── IS13SessionFactory.java
│ │ │ │ │ │ │ │ │ └── S13SessionState.java
│ │ │ │ │ │ │ │ ├── s6a/
│ │ │ │ │ │ │ │ │ ├── IS6aMessageFactory.java
│ │ │ │ │ │ │ │ │ ├── IS6aSessionData.java
│ │ │ │ │ │ │ │ │ ├── IS6aSessionFactory.java
│ │ │ │ │ │ │ │ │ └── S6aSessionState.java
│ │ │ │ │ │ │ │ ├── sh/
│ │ │ │ │ │ │ │ │ ├── IShMessageFactory.java
│ │ │ │ │ │ │ │ │ ├── IShSessionData.java
│ │ │ │ │ │ │ │ │ └── IShSessionFactory.java
│ │ │ │ │ │ │ │ ├── slg/
│ │ │ │ │ │ │ │ │ ├── ISLgMessageFactory.java
│ │ │ │ │ │ │ │ │ ├── ISLgSessionData.java
│ │ │ │ │ │ │ │ │ ├── ISLgSessionFactory.java
│ │ │ │ │ │ │ │ │ └── SLgSessionState.java
│ │ │ │ │ │ │ │ └── slh/
│ │ │ │ │ │ │ │ ├── ISLhMessageFactory.java
│ │ │ │ │ │ │ │ ├── ISLhSessionData.java
│ │ │ │ │ │ │ │ ├── ISLhSessionFactory.java
│ │ │ │ │ │ │ │ └── SLhSessionState.java
│ │ │ │ │ │ │ ├── concurrent/
│ │ │ │ │ │ │ │ ├── DummyConcurrentFactory.java
│ │ │ │ │ │ │ │ ├── IConcurrentEntityFactory.java
│ │ │ │ │ │ │ │ └── IConcurrentFactory.java
│ │ │ │ │ │ │ ├── data/
│ │ │ │ │ │ │ │ └── ISessionDatasource.java
│ │ │ │ │ │ │ ├── statistic/
│ │ │ │ │ │ │ │ ├── IStatistic.java
│ │ │ │ │ │ │ │ ├── IStatisticManager.java
│ │ │ │ │ │ │ │ ├── IStatisticProcessor.java
│ │ │ │ │ │ │ │ └── IStatisticRecord.java
│ │ │ │ │ │ │ └── timer/
│ │ │ │ │ │ │ └── ITimerFacility.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ ├── DiameterUtilities.java
│ │ │ │ │ │ ├── app/
│ │ │ │ │ │ │ ├── AppAnswerEventImpl.java
│ │ │ │ │ │ │ ├── AppEventImpl.java
│ │ │ │ │ │ │ ├── AppRequestEventImpl.java
│ │ │ │ │ │ │ ├── AppSessionImpl.java
│ │ │ │ │ │ │ ├── acc/
│ │ │ │ │ │ │ │ ├── AccLocalSessionDataFactory.java
│ │ │ │ │ │ │ │ ├── AccSessionFactoryImpl.java
│ │ │ │ │ │ │ │ ├── AccountAnswerImpl.java
│ │ │ │ │ │ │ │ ├── AccountRequestImpl.java
│ │ │ │ │ │ │ │ └── AppAccSessionImpl.java
│ │ │ │ │ │ │ ├── auth/
│ │ │ │ │ │ │ │ ├── AbortSessionAnswerImpl.java
│ │ │ │ │ │ │ │ ├── AbortSessionRequestImpl.java
│ │ │ │ │ │ │ │ ├── AppAuthSessionImpl.java
│ │ │ │ │ │ │ │ ├── AuthLocalSessionDataFactory.java
│ │ │ │ │ │ │ │ ├── AuthSessionFactoryImpl.java
│ │ │ │ │ │ │ │ ├── ReAuthAnswerImpl.java
│ │ │ │ │ │ │ │ ├── ReAuthRequestImpl.java
│ │ │ │ │ │ │ │ ├── SessionTermAnswerImpl.java
│ │ │ │ │ │ │ │ └── SessionTermRequestImpl.java
│ │ │ │ │ │ │ ├── cca/
│ │ │ │ │ │ │ │ ├── AppCCASessionImpl.java
│ │ │ │ │ │ │ │ ├── CCALocalSessionDataFactory.java
│ │ │ │ │ │ │ │ ├── CCASessionFactoryImpl.java
│ │ │ │ │ │ │ │ ├── JCreditControlAnswerImpl.java
│ │ │ │ │ │ │ │ └── JCreditControlRequestImpl.java
│ │ │ │ │ │ │ ├── cxdx/
│ │ │ │ │ │ │ │ ├── CxDxLocalSessionDataFactory.java
│ │ │ │ │ │ │ │ ├── CxDxLocalSessionDataImpl.java
│ │ │ │ │ │ │ │ ├── CxDxSession.java
│ │ │ │ │ │ │ │ ├── CxDxSessionFactoryImpl.java
│ │ │ │ │ │ │ │ ├── JLocationInfoAnswerImpl.java
│ │ │ │ │ │ │ │ ├── JLocationInfoRequestImpl.java
│ │ │ │ │ │ │ │ ├── JMultimediaAuthAnswerImpl.java
│ │ │ │ │ │ │ │ ├── JMultimediaAuthRequestImpl.java
│ │ │ │ │ │ │ │ ├── JPushProfileAnswerImpl.java
│ │ │ │ │ │ │ │ ├── JPushProfileRequestImpl.java
│ │ │ │ │ │ │ │ ├── JRegistrationTerminationAnswerImpl.java
│ │ │ │ │ │ │ │ ├── JRegistrationTerminationRequestImpl.java
│ │ │ │ │ │ │ │ ├── JServerAssignmentAnswerImpl.java
│ │ │ │ │ │ │ │ ├── JServerAssignmentRequestImpl.java
│ │ │ │ │ │ │ │ ├── JUserAuthorizationAnswerImpl.java
│ │ │ │ │ │ │ │ └── JUserAuthorizationRequestImpl.java
│ │ │ │ │ │ │ ├── gq/
│ │ │ │ │ │ │ │ └── GqSessionFactoryImpl.java
│ │ │ │ │ │ │ ├── gx/
│ │ │ │ │ │ │ │ ├── AppGxSessionImpl.java
│ │ │ │ │ │ │ │ ├── GxCreditControlAnswerImpl.java
│ │ │ │ │ │ │ │ ├── GxCreditControlRequestImpl.java
│ │ │ │ │ │ │ │ ├── GxLocalSessionDataFactory.java
│ │ │ │ │ │ │ │ ├── GxReAuthAnswerImpl.java
│ │ │ │ │ │ │ │ ├── GxReAuthRequestImpl.java
│ │ │ │ │ │ │ │ └── GxSessionFactoryImpl.java
│ │ │ │ │ │ │ ├── rf/
│ │ │ │ │ │ │ │ ├── AppRfSessionImpl.java
│ │ │ │ │ │ │ │ ├── RfAccountingAnswerImpl.java
│ │ │ │ │ │ │ │ ├── RfAccountingRequestImpl.java
│ │ │ │ │ │ │ │ ├── RfLocalSessionDataFactory.java
│ │ │ │ │ │ │ │ └── RfSessionFactoryImpl.java
│ │ │ │ │ │ │ ├── ro/
│ │ │ │ │ │ │ │ ├── AppRoSessionImpl.java
│ │ │ │ │ │ │ │ ├── RoCreditControlAnswerImpl.java
│ │ │ │ │ │ │ │ ├── RoCreditControlRequestImpl.java
│ │ │ │ │ │ │ │ ├── RoLocalSessionDataFactory.java
│ │ │ │ │ │ │ │ └── RoSessionFactoryImpl.java
│ │ │ │ │ │ │ ├── rx/
│ │ │ │ │ │ │ │ ├── AppRxSessionImpl.java
│ │ │ │ │ │ │ │ ├── RxAAAnswerImpl.java
│ │ │ │ │ │ │ │ ├── RxAARequestImpl.java
│ │ │ │ │ │ │ │ ├── RxAbortSessionAnswerImpl.java
│ │ │ │ │ │ │ │ ├── RxAbortSessionRequestImpl.java
│ │ │ │ │ │ │ │ ├── RxLocalSessionDataFactory.java
│ │ │ │ │ │ │ │ ├── RxReAuthAnswerImpl.java
│ │ │ │ │ │ │ │ ├── RxReAuthRequestImpl.java
│ │ │ │ │ │ │ │ ├── RxSessionFactoryImpl.java
│ │ │ │ │ │ │ │ ├── RxSessionTermAnswerImpl.java
│ │ │ │ │ │ │ │ └── RxSessionTermRequestImpl.java
│ │ │ │ │ │ │ ├── s13/
│ │ │ │ │ │ │ │ ├── JMEIdentityCheckAnswerImpl.java
│ │ │ │ │ │ │ │ ├── JMEIdentityCheckRequestImpl.java
│ │ │ │ │ │ │ │ ├── S13LocalSessionDataFactory.java
│ │ │ │ │ │ │ │ ├── S13LocalSessionDataImpl.java
│ │ │ │ │ │ │ │ ├── S13Session.java
│ │ │ │ │ │ │ │ └── S13SessionFactoryImpl.java
│ │ │ │ │ │ │ ├── s6a/
│ │ │ │ │ │ │ │ ├── JAuthenticationInformationAnswerImpl.java
│ │ │ │ │ │ │ │ ├── JAuthenticationInformationRequestImpl.java
│ │ │ │ │ │ │ │ ├── JCancelLocationAnswerImpl.java
│ │ │ │ │ │ │ │ ├── JCancelLocationRequestImpl.java
│ │ │ │ │ │ │ │ ├── JDeleteSubscriberDataAnswerImpl.java
│ │ │ │ │ │ │ │ ├── JDeleteSubscriberDataRequestImpl.java
│ │ │ │ │ │ │ │ ├── JInsertSubscriberDataAnswerImpl.java
│ │ │ │ │ │ │ │ ├── JInsertSubscriberDataRequestImpl.java
│ │ │ │ │ │ │ │ ├── JNotifyAnswerImpl.java
│ │ │ │ │ │ │ │ ├── JNotifyRequestImpl.java
│ │ │ │ │ │ │ │ ├── JPurgeUEAnswerImpl.java
│ │ │ │ │ │ │ │ ├── JPurgeUERequestImpl.java
│ │ │ │ │ │ │ │ ├── JResetAnswerImpl.java
│ │ │ │ │ │ │ │ ├── JResetRequestImpl.java
│ │ │ │ │ │ │ │ ├── JUpdateLocationAnswerImpl.java
│ │ │ │ │ │ │ │ ├── JUpdateLocationRequestImpl.java
│ │ │ │ │ │ │ │ ├── S6aLocalSessionDataFactory.java
│ │ │ │ │ │ │ │ ├── S6aLocalSessionDataImpl.java
│ │ │ │ │ │ │ │ ├── S6aSession.java
│ │ │ │ │ │ │ │ └── S6aSessionFactoryImpl.java
│ │ │ │ │ │ │ ├── sh/
│ │ │ │ │ │ │ │ ├── ProfileUpdateAnswerImpl.java
│ │ │ │ │ │ │ │ ├── ProfileUpdateRequestImpl.java
│ │ │ │ │ │ │ │ ├── PushNotificationAnswerImpl.java
│ │ │ │ │ │ │ │ ├── PushNotificationRequestImpl.java
│ │ │ │ │ │ │ │ ├── ShLocalSessionDataFactory.java
│ │ │ │ │ │ │ │ ├── ShSession.java
│ │ │ │ │ │ │ │ ├── ShSessionFactoryImpl.java
│ │ │ │ │ │ │ │ ├── SubscribeNotificationsAnswerImpl.java
│ │ │ │ │ │ │ │ ├── SubscribeNotificationsRequestImpl.java
│ │ │ │ │ │ │ │ ├── UserDataAnswerImpl.java
│ │ │ │ │ │ │ │ └── UserDataRequestImpl.java
│ │ │ │ │ │ │ ├── slg/
│ │ │ │ │ │ │ │ ├── LocationReportAnswerImpl.java
│ │ │ │ │ │ │ │ ├── LocationReportRequestImpl.java
│ │ │ │ │ │ │ │ ├── ProvideLocationAnswerImpl.java
│ │ │ │ │ │ │ │ ├── ProvideLocationRequestImpl.java
│ │ │ │ │ │ │ │ ├── SLgLocalSessionDataFactory.java
│ │ │ │ │ │ │ │ ├── SLgLocalSessionDataImpl.java
│ │ │ │ │ │ │ │ ├── SLgSession.java
│ │ │ │ │ │ │ │ └── SLgSessionFactoryImpl.java
│ │ │ │ │ │ │ └── slh/
│ │ │ │ │ │ │ ├── LCSRoutingInfoAnswerImpl.java
│ │ │ │ │ │ │ ├── LCSRoutingInfoRequestImpl.java
│ │ │ │ │ │ │ ├── SLhLocalSessionDataFactory.java
│ │ │ │ │ │ │ ├── SLhLocalSessionDataImpl.java
│ │ │ │ │ │ │ ├── SLhSession.java
│ │ │ │ │ │ │ └── SLhSessionFactoryImpl.java
│ │ │ │ │ │ ├── concurrent/
│ │ │ │ │ │ │ ├── AbstractTask.java
│ │ │ │ │ │ │ ├── BaseThreadFactory.java
│ │ │ │ │ │ │ ├── CommonScheduledExecutorService.java
│ │ │ │ │ │ │ ├── ConcurrentEntityFactory.java
│ │ │ │ │ │ │ ├── ConcurrentFactory.java
│ │ │ │ │ │ │ ├── DefaultCallable.java
│ │ │ │ │ │ │ ├── DefaultRejectedExecutionHandler.java
│ │ │ │ │ │ │ └── DefaultRunnable.java
│ │ │ │ │ │ ├── controller/
│ │ │ │ │ │ │ └── AbstractPeer.java
│ │ │ │ │ │ ├── data/
│ │ │ │ │ │ │ └── LocalDataSource.java
│ │ │ │ │ │ ├── statistic/
│ │ │ │ │ │ │ ├── StatisticImpl.java
│ │ │ │ │ │ │ ├── StatisticManagerImpl.java
│ │ │ │ │ │ │ ├── StatisticProcessorImpl.java
│ │ │ │ │ │ │ └── StatisticRecordImpl.java
│ │ │ │ │ │ ├── timer/
│ │ │ │ │ │ │ └── LocalTimerFacilityImpl.java
│ │ │ │ │ │ └── validation/
│ │ │ │ │ │ ├── AvpRepresentationImpl.java
│ │ │ │ │ │ ├── DictionaryImpl.java
│ │ │ │ │ │ └── MessageRepresentationImpl.java
│ │ │ │ │ └── server/
│ │ │ │ │ ├── api/
│ │ │ │ │ │ ├── IFsmFactory.java
│ │ │ │ │ │ ├── IMetaData.java
│ │ │ │ │ │ ├── IMutablePeerTable.java
│ │ │ │ │ │ ├── INetwork.java
│ │ │ │ │ │ ├── IOverloadManager.java
│ │ │ │ │ │ ├── IPeer.java
│ │ │ │ │ │ ├── IRouter.java
│ │ │ │ │ │ ├── IStateMachine.java
│ │ │ │ │ │ ├── agent/
│ │ │ │ │ │ │ ├── IAgent.java
│ │ │ │ │ │ │ ├── IAgentConfiguration.java
│ │ │ │ │ │ │ ├── IProxy.java
│ │ │ │ │ │ │ └── IRedirect.java
│ │ │ │ │ │ └── io/
│ │ │ │ │ │ ├── INetworkConnectionListener.java
│ │ │ │ │ │ ├── INetworkGuard.java
│ │ │ │ │ │ └── ITransportLayerFactory.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── MessageValidator.java
│ │ │ │ │ ├── MetaDataImpl.java
│ │ │ │ │ ├── MutablePeerTableImpl.java
│ │ │ │ │ ├── NetworkImpl.java
│ │ │ │ │ ├── OverloadManagerImpl.java
│ │ │ │ │ ├── PeerImpl.java
│ │ │ │ │ ├── RouterImpl.java
│ │ │ │ │ ├── StackImpl.java
│ │ │ │ │ ├── StackImplMBean.java
│ │ │ │ │ ├── agent/
│ │ │ │ │ │ ├── AgentConfigurationImpl.java
│ │ │ │ │ │ ├── AgentImpl.java
│ │ │ │ │ │ ├── ProxyAgentImpl.java
│ │ │ │ │ │ └── RedirectAgentImpl.java
│ │ │ │ │ ├── app/
│ │ │ │ │ │ ├── acc/
│ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ ├── IServerAccSessionData.java
│ │ │ │ │ │ │ ├── ServerAccSessionDataLocalImpl.java
│ │ │ │ │ │ │ └── ServerAccSessionImpl.java
│ │ │ │ │ │ ├── auth/
│ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ ├── IServerAuthSessionData.java
│ │ │ │ │ │ │ ├── ServerAuthSessionDataLocalImpl.java
│ │ │ │ │ │ │ └── ServerAuthSessionImpl.java
│ │ │ │ │ │ ├── cca/
│ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ ├── IServerCCASessionData.java
│ │ │ │ │ │ │ ├── ServerCCASessionDataLocalImpl.java
│ │ │ │ │ │ │ └── ServerCCASessionImpl.java
│ │ │ │ │ │ ├── cxdx/
│ │ │ │ │ │ │ ├── CxDxServerSessionImpl.java
│ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ ├── IServerCxDxSessionData.java
│ │ │ │ │ │ │ └── ServerCxDxSessionDataLocalImpl.java
│ │ │ │ │ │ ├── gq/
│ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ └── GqServerSessionImpl.java
│ │ │ │ │ │ ├── gx/
│ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ ├── IServerGxSessionData.java
│ │ │ │ │ │ │ ├── ServerGxSessionDataLocalImpl.java
│ │ │ │ │ │ │ └── ServerGxSessionImpl.java
│ │ │ │ │ │ ├── rf/
│ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ ├── IServerRfSessionData.java
│ │ │ │ │ │ │ ├── ServerRfSessionDataLocalImpl.java
│ │ │ │ │ │ │ └── ServerRfSessionImpl.java
│ │ │ │ │ │ ├── ro/
│ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ ├── IServerRoSessionData.java
│ │ │ │ │ │ │ ├── ServerRoSessionDataLocalImpl.java
│ │ │ │ │ │ │ └── ServerRoSessionImpl.java
│ │ │ │ │ │ ├── rx/
│ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ ├── IServerRxSessionData.java
│ │ │ │ │ │ │ ├── ServerRxSessionDataLocalImpl.java
│ │ │ │ │ │ │ └── ServerRxSessionImpl.java
│ │ │ │ │ │ ├── s13/
│ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ ├── IServerS13SessionData.java
│ │ │ │ │ │ │ ├── S13ServerSessionImpl.java
│ │ │ │ │ │ │ └── ServerS13SessionDataLocalImpl.java
│ │ │ │ │ │ ├── s6a/
│ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ ├── IServerS6aSessionData.java
│ │ │ │ │ │ │ ├── S6aServerSessionImpl.java
│ │ │ │ │ │ │ └── ServerS6aSessionDataLocalImpl.java
│ │ │ │ │ │ ├── sh/
│ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ ├── IShServerSessionData.java
│ │ │ │ │ │ │ ├── ShServerSessionDataLocalImpl.java
│ │ │ │ │ │ │ └── ShServerSessionImpl.java
│ │ │ │ │ │ ├── slg/
│ │ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ │ ├── IServerSLgSessionData.java
│ │ │ │ │ │ │ ├── SLgServerSessionImpl.java
│ │ │ │ │ │ │ └── ServerSLgSessionDataLocalImpl.java
│ │ │ │ │ │ └── slh/
│ │ │ │ │ │ ├── Event.java
│ │ │ │ │ │ ├── IServerSLhSessionData.java
│ │ │ │ │ │ ├── SLhServerSessionImpl.java
│ │ │ │ │ │ └── ServerSLhSessionDataLocalImpl.java
│ │ │ │ │ ├── fsm/
│ │ │ │ │ │ ├── FsmFactoryImpl.java
│ │ │ │ │ │ └── PeerFSMImpl.java
│ │ │ │ │ ├── helpers/
│ │ │ │ │ │ ├── ApplicationIdSelector.java
│ │ │ │ │ │ ├── EmptyConfiguration.java
│ │ │ │ │ │ ├── ExtensionPoint.java
│ │ │ │ │ │ ├── Loggers.java
│ │ │ │ │ │ ├── Parameters.java
│ │ │ │ │ │ └── XMLConfiguration.java
│ │ │ │ │ └── io/
│ │ │ │ │ ├── TransportLayerFactory.java
│ │ │ │ │ ├── tcp/
│ │ │ │ │ │ ├── NetworkGuard.java
│ │ │ │ │ │ └── netty/
│ │ │ │ │ │ └── NetworkGuard.java
│ │ │ │ │ └── tls/
│ │ │ │ │ ├── NetworkGuard.java
│ │ │ │ │ └── netty/
│ │ │ │ │ └── NetworkGuard.java
│ │ │ │ └── resources/
│ │ │ │ ├── META-INF/
│ │ │ │ │ ├── agpl-3.0.txt
│ │ │ │ │ ├── jdiameter-client.xsd
│ │ │ │ │ ├── jdiameter-server.xsd
│ │ │ │ │ └── version.properties
│ │ │ │ └── dictionary.xml
│ │ │ └── test/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── jdiameter/
│ │ │ │ └── client/
│ │ │ │ └── impl/
│ │ │ │ └── router/
│ │ │ │ └── TestRouter.java
│ │ │ └── resources/
│ │ │ ├── jdiameter-weightedleastconnections-config.xml
│ │ │ └── jdiameter-weightedroundrobin-config.xml
│ │ └── pom.xml
│ ├── jdiameter-ha/
│ │ ├── api/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── jdiameter/
│ │ │ └── api/
│ │ │ └── ha/
│ │ │ └── data/
│ │ │ └── CachingException.java
│ │ ├── impl/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── jdiameter/
│ │ │ └── impl/
│ │ │ └── ha/
│ │ │ ├── client/
│ │ │ │ ├── acc/
│ │ │ │ │ └── ClientAccSessionDataReplicatedImpl.java
│ │ │ │ ├── auth/
│ │ │ │ │ └── ClientAuthSessionDataReplicatedImpl.java
│ │ │ │ ├── cca/
│ │ │ │ │ └── ClientCCASessionDataReplicatedImpl.java
│ │ │ │ ├── cxdx/
│ │ │ │ │ └── ClientCxDxSessionDataReplicatedImpl.java
│ │ │ │ ├── gx/
│ │ │ │ │ └── ClientGxSessionDataReplicatedImpl.java
│ │ │ │ ├── rf/
│ │ │ │ │ └── ClientRfSessionDataReplicatedImpl.java
│ │ │ │ ├── ro/
│ │ │ │ │ └── ClientRoSessionDataReplicatedImpl.java
│ │ │ │ ├── rx/
│ │ │ │ │ └── ClientRxSessionDataReplicatedImpl.java
│ │ │ │ ├── s13/
│ │ │ │ │ └── ClientS13SessionDataReplicatedImpl.java
│ │ │ │ └── sh/
│ │ │ │ └── ShClientSessionDataReplicatedImpl.java
│ │ │ ├── common/
│ │ │ │ ├── AppSessionDataReplicatedImpl.java
│ │ │ │ ├── acc/
│ │ │ │ │ └── AccReplicatedSessionDataFactory.java
│ │ │ │ ├── auth/
│ │ │ │ │ └── AuthReplicatedSessionDataFactory.java
│ │ │ │ ├── cca/
│ │ │ │ │ └── CCAReplicatedSessionDataFactory.java
│ │ │ │ ├── cxdx/
│ │ │ │ │ ├── CxDxReplicatedSessionDataFactory.java
│ │ │ │ │ └── CxDxSessionDataReplicatedImpl.java
│ │ │ │ ├── gx/
│ │ │ │ │ └── GxReplicatedSessionDataFactory.java
│ │ │ │ ├── rf/
│ │ │ │ │ └── RfReplicatedSessionDataFactory.java
│ │ │ │ ├── ro/
│ │ │ │ │ └── RoReplicatedSessionDataFactory.java
│ │ │ │ ├── rx/
│ │ │ │ │ └── RxReplicatedSessionDataFactory.java
│ │ │ │ ├── s13/
│ │ │ │ │ ├── S13ReplicatedSessionDataFactory.java
│ │ │ │ │ └── S13SessionDataReplicatedImpl.java
│ │ │ │ └── sh/
│ │ │ │ └── ShReplicatedSessionDataFactory.java
│ │ │ ├── data/
│ │ │ │ ├── CachedSessionDatasource.java
│ │ │ │ └── CachedSessionDatasourceImpl.java
│ │ │ ├── server/
│ │ │ │ ├── acc/
│ │ │ │ │ └── ServerAccSessionDataReplicatedImpl.java
│ │ │ │ ├── auth/
│ │ │ │ │ └── ServerAuthSessionDataReplicatedImpl.java
│ │ │ │ ├── cca/
│ │ │ │ │ └── ServerCCASessionDataReplicatedImpl.java
│ │ │ │ ├── cxdx/
│ │ │ │ │ └── ServerCxDxSessionDataReplicatedImpl.java
│ │ │ │ ├── gx/
│ │ │ │ │ └── ServerGxSessionDataReplicatedImpl.java
│ │ │ │ ├── rf/
│ │ │ │ │ └── ServerRfSessionDataReplicatedImpl.java
│ │ │ │ ├── ro/
│ │ │ │ │ └── ServerRoSessionDataReplicatedImpl.java
│ │ │ │ ├── rx/
│ │ │ │ │ └── ServerRxSessionDataReplicatedImpl.java
│ │ │ │ ├── s13/
│ │ │ │ │ └── ServerS13SessionDataReplicatedImpl.java
│ │ │ │ └── sh/
│ │ │ │ └── ShServerSessionDataReplicatedImpl.java
│ │ │ └── timer/
│ │ │ └── ReplicatedTimerFacilityImpl.java
│ │ └── pom.xml
│ └── pom.xml
├── docs/
│ ├── antora-playbook.yml
│ ├── antora.yml
│ ├── modules/
│ │ └── ROOT/
│ │ ├── assets/
│ │ │ └── images/
│ │ │ └── .keepme
│ │ ├── examples/
│ │ │ └── .keepme
│ │ ├── nav.adoc
│ │ └── pages/
│ │ ├── Author_Group.adoc
│ │ ├── Book_Info.adoc
│ │ ├── Chapter-Introduction.adoc
│ │ ├── Chapter-JDiameter.adoc
│ │ ├── Conventions.adoc
│ │ ├── Diameter_User_Guide.adoc
│ │ ├── Implementing-Diameter-Service.adoc
│ │ ├── Java_Development_Kit-Installing_Configuring_and_Running.adoc
│ │ ├── Preface.adoc
│ │ ├── Revision_History.adoc
│ │ ├── Section-Conventions.adoc
│ │ ├── Section-Feedback.adoc
│ │ ├── Section-Introduction-Message_Format.adoc
│ │ ├── Section-JDiameter-Configuration.adoc
│ │ ├── Section-JDiameter-Design_Overview.adoc
│ │ ├── Section-JDiameter-Setup.adoc
│ │ ├── Section-JDiameter-Source_Overview.adoc
│ │ ├── Section-JDiameter-Validator-Configuration.adoc
│ │ ├── Section-JDiameter-Validator-Source_Overview.adoc
│ │ ├── Section-JDiameter-Validator.adoc
│ │ ├── Setting_the_JBOSS_HOME_Environment_Variable.adoc
│ │ ├── includes/
│ │ │ ├── attributes.adoc
│ │ │ ├── quarkus-jdiameter.adoc
│ │ │ └── quarkus-jdiameter_quarkus.diameter.adoc
│ │ └── index.adoc
│ ├── package.json
│ ├── pom.xml
│ └── templates/
│ └── includes/
│ └── attributes.adoc
├── examples/
│ ├── charging-server-simulator/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── assembly/
│ │ │ └── standalone.xml
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── mobicents/
│ │ │ └── servers/
│ │ │ └── diameter/
│ │ │ ├── charging/
│ │ │ │ ├── ChargingServerSimulator.java
│ │ │ │ └── listeners/
│ │ │ │ └── RoClientListener.java
│ │ │ └── utils/
│ │ │ ├── DiameterUtilities.java
│ │ │ └── StackCreator.java
│ │ └── resources/
│ │ ├── accounts.properties
│ │ ├── config-server.xml
│ │ ├── dictionary.xml
│ │ └── log4j.properties
│ └── guide1/
│ ├── bin/
│ │ ├── crun.sh
│ │ └── srun.sh
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── org/
│ │ └── example/
│ │ ├── client/
│ │ │ └── ExampleClient.java
│ │ └── server/
│ │ └── ExampleServer.java
│ └── resources/
│ ├── log4j.properties
│ └── org/
│ └── example/
│ ├── client/
│ │ ├── client-jdiameter-config.xml
│ │ └── dictionary.xml
│ └── server/
│ ├── dictionary.xml
│ └── server-jdiameter-config.xml
├── integration-tests/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── io/
│ │ │ └── quarkiverse/
│ │ │ └── jdiameter/
│ │ │ └── it/
│ │ │ └── JdiameterResource.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── io/
│ └── quarkiverse/
│ └── jdiameter/
│ └── it/
│ ├── JdiameterResourceIT.java
│ └── JdiameterResourceTest.java
├── lombok.config
├── pom.xml
└── quarkus-diameter/
├── deployment/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── io/
│ │ └── quarkiverse/
│ │ └── diameter/
│ │ └── deployment/
│ │ ├── DiameterBuildItem.java
│ │ └── DiameterProcessor.java
│ └── test/
│ ├── java/
│ │ └── io/
│ │ └── quarkiverse/
│ │ └── diameter/
│ │ └── deployment/
│ │ ├── DiameterConfigTest.java
│ │ ├── DiameterInterceptorTest.java
│ │ ├── DiameterStackTest.java
│ │ └── DiameterValidatorTest.java
│ └── resources/
│ └── application.properties
├── pom.xml
└── runtime/
├── pom.xml
└── src/
└── main/
├── java/
│ └── io/
│ └── quarkiverse/
│ └── diameter/
│ ├── ApplicationMode.java
│ ├── DiameterApplication.java
│ ├── DiameterConfig.java
│ ├── DiameterService.java
│ ├── DiameterServiceInterceptor.java
│ ├── DiameterServiceOptions.java
│ └── runtime/
│ ├── DiameterConfiguration.java
│ ├── DiameterDetailConfig.java
│ ├── DiameterRecorder.java
│ ├── DiameterRunTimeConfig.java
│ ├── DiameterSetupException.java
│ ├── JDiameterVersionRecorder.java
│ ├── config/
│ │ ├── Agent.java
│ │ ├── ApplicationId.java
│ │ ├── Concurrent.java
│ │ ├── Extension.java
│ │ ├── LocalPeer.java
│ │ ├── Network.java
│ │ ├── OverloadMonitor.java
│ │ ├── Parameter.java
│ │ ├── Peer.java
│ │ └── Realm.java
│ └── transport/
│ └── TLSClientConnection.java
└── resources/
└── META-INF/
└── quarkus-extension.yaml
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/CODEOWNERS
================================================
# Lines starting with '#' are comments.
# Each line is a file pattern followed by one or more owners.
# More details are here: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
# The '*' pattern is global owners.
# Order is important. The last matching pattern has the most precedence.
# The folders are ordered as follows:
# In each subsection folders are ordered first by depth, then alphabetically.
# This should make it easy to add new rules without breaking existing ones.
* @quarkiverse/quarkiverse-jdiameter
================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "maven" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "daily"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: daily
================================================
FILE: .github/project.yml
================================================
release:
current-version: "2.5.0"
next-version: "2.5.1-SNAPSHOT"
================================================
FILE: .github/workflows/build.yml
================================================
name: Build
on:
push:
branches:
- "main"
paths-ignore:
- '.gitignore'
- 'CODEOWNERS'
- 'LICENSE'
- '*.md'
- '*.adoc'
- '*.txt'
- '.all-contributorsrc'
pull_request:
paths-ignore:
- '.gitignore'
- 'CODEOWNERS'
- 'LICENSE'
- '*.md'
- '*.adoc'
- '*.txt'
- '.all-contributorsrc'
permissions:
contents: read
pull-requests: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
defaults:
run:
shell: bash
jobs:
build:
name: Build on ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
# os: [windows-latest, macos-latest, ubuntu-latest]
os: [ ubuntu-latest ]
runs-on: ${{ matrix.os }}
steps:
- name: Prepare git
run: git config --global core.autocrlf false
if: startsWith(matrix.os, 'windows')
- uses: actions/checkout@v6
- name: Set up JDK 21
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 21
cache: 'maven'
- name: Build with Maven
run: mvn -B clean install -Dno-format
================================================
FILE: .github/workflows/deploy-snapshots.yml.disabled
================================================
# This workflow will build and deploy a snapshot of your artifact to Sonatype Snapshots repository
name: Deploy Snapshots
concurrency:
group: ${{ github.ref }}-${{ github.workflow }}
cancel-in-progress: true
on:
workflow_dispatch:
push:
branches: [ main ]
defaults:
run:
shell: bash
jobs:
deploy-snapshot:
runs-on: ubuntu-latest
name: Deploy Snapshot artifacts
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 17
cache: 'maven'
server-id: 'ossrh'
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
gpg-passphrase: MAVEN_GPG_PASSPHRASE
- name: Deploy Snapshot
run: |
mvn -B clean deploy -DperformRelease=true -Drelease
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
================================================
FILE: .github/workflows/pre-release.yml
================================================
name: Quarkiverse Pre Release
on:
pull_request:
paths:
- '.github/project.yml'
permissions:
contents: read
pull-requests: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
pre-release:
name: Pre-Release
uses: quarkiverse/.github/.github/workflows/pre-release.yml@main
secrets: inherit
================================================
FILE: .github/workflows/quarkus-snapshot.yaml
================================================
name: "Quarkus ecosystem CI"
on:
workflow_dispatch:
watch:
types: [started]
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
uses: quarkiverse/.github/.github/workflows/quarkus-ecosystem-ci.yml@main
secrets: inherit
with:
ecosystem_ci_repo_path: quarkiverse-jdiameter
java_version: 21
================================================
FILE: .github/workflows/release-perform.yml
================================================
name: Quarkiverse Perform Release
run-name: Perform ${{github.event.inputs.tag || github.ref_name}} Release
on:
push:
tags:
- '*'
workflow_dispatch:
inputs:
tag:
description: 'Tag to release'
required: true
permissions:
attestations: write
id-token: write
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
perform-release:
name: Perform Release
uses: quarkiverse/.github/.github/workflows/perform-release.yml@main
secrets: inherit
with:
version: ${{github.event.inputs.tag || github.ref_name}}
java_version: 21
================================================
FILE: .github/workflows/release-prepare.yml
================================================
name: Quarkiverse Prepare Release
on:
pull_request:
types: [ closed ]
paths:
- '.github/project.yml'
- '.github/workflows/release-prepare.yml'
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
prepare-release:
name: Prepare Release
if: ${{ github.event.pull_request.merged == true}}
uses: quarkiverse/.github/.github/workflows/prepare-release.yml@main
secrets: inherit
with:
java_version: 21
================================================
FILE: .github/workflows/release.yml.disabled
================================================
name: Quarkiverse Release
on:
pull_request:
types: [ closed ]
paths:
- '.github/project.yml'
- '.github/workflows/release.yml'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
defaults:
run:
shell: bash
jobs:
release:
runs-on: ubuntu-latest
name: release
if: ${{github.event.pull_request.merged == true}}
steps:
- uses: radcortez/project-metadata-action@main
name: Retrieve project metadata
id: metadata
with:
github-token: ${{secrets.GITHUB_TOKEN}}
metadata-file-path: '.github/project.yml'
- uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4.2.2
with:
distribution: temurin
java-version: 21
cache: 'maven'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
gpg-passphrase: MAVEN_GPG_PASSPHRASE
- name: Set up Maven 3.9.6
uses: stCarolas/setup-maven@v5
with:
maven-version: 3.9.6
- name: Configure Git author
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
- name: Update latest release version in docs
run: |
mvn -B -ntp -pl docs -am package -DskipTests -DskipITs -Denforcer.skip -Dformatter.skip -Dimpsort.skip
if ! git diff --quiet docs/modules/ROOT/pages/includes; then
git add docs/modules/ROOT/pages/includes
git commit -m "Update the latest release version ${{steps.metadata.outputs.current-version}} in documentation"
fi
- name: Maven release ${{steps.metadata.outputs.current-version}}
run: |
mvn -B release:prepare -Prelease -DreleaseVersion=${{steps.metadata.outputs.current-version}} -DdevelopmentVersion=${{steps.metadata.outputs.next-version}}
mvn -B release:perform -Darguments=-DperformRelease -DperformRelease -Prelease
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
- name: Push changes to ${{github.base_ref}} branch
run: |
git push
git push origin ${{steps.metadata.outputs.current-version}}
================================================
FILE: .gitignore
================================================
# Java compiled #
#################
*.class
# Eclipse #
###########
.classpath
.project
.settings
# IntelliJ IDEA #
#################
.idea/
*.iml
*.iws
# Maven #
#########
target
\$\{env.JBOSS_HOME\}
# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
Icon?
ehthumbs.db
Thumbs.db
#ascidoc
**/node_modules/
package-lock.json
**/cache/
================================================
FILE: LICENSE
================================================
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc.
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
Copyright (C)
This program is free software: you can redistribute it and/or modify
it 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 .
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
.
================================================
FILE: README.md
================================================
# Quarkus Diameter Stack
[](#contributors-)
[](https://github.com/quarkiverse/quarkus-jdiameter/actions/workflows/build.yml)
[](https://search.maven.org/artifact/io.quarkiverse.jdiameter/quarkus-jdiameter)
[](https://github.com/quarkiverse/quarkus-jdiameter/blob/main/LICENSE)
This is a fork of the RestComm jDiameter Stack with a couple of enhancements done:
- Update the minimum java compatibility to Java 21
- Added support for Virtual Threading
- Removed use of Pico Containers
- Added Quarkus Extension
- Updated all the dependencies to latest versions
- Removed support for SCTP protocol (Not used and deprecated for 5G)
- Reworked the jdiameter-ha component to use Infinispan as the caching provider
**NOTE**: This is a community extension, and it is not related nor supported by RestComm Ltd.
## Virtual Threading
There is now a new parameter called "UseVirtualThreads" that if set to true will use virtual threads for the diameter
stack.
To use virtual threading, the minimum supported Java version had to be changed to Java 21.
## Quarkus Extension
The extension allows for the injection of configurations and stacks.
See the docs folder for the relevant documentation.
================================================
FILE: core/docs/sources-asciidoc/src/main/asciidoc/Chapter-Introduction.adoc~
================================================
[[_introduction]]
= Introduction to &THIS.PLATFORM; Diameter
Diameter is a computer networking protocol for Authentication, Authorization and Accounting (), as defined in RFC3588.
It is a successor to RADIUS, and has been designed to overcome certain RADIUS limitations:
* No transport reliability and flexibility (Diameter uses TCP/SCTP instead of UDP).
* No security within protocol (Diameter supports IPSec (mandatory) and TLS (optional)).
* Limited address space for AVPs (Diameter uses 32-bit address space instead of 8-bit).
* Only stateless mode is possible (Diameter supports both stateful and stateless modes).
* Static peers (Diameter offers dynamic discovery, using DNS, SRV and NAPTR).
* No peer alignment capabilities (Diameter introduces capabilities negotiation).
* No support for transport layer failover.
Diameter follows http://tools.ietf.org/html/rfc3539[RFC3539], which introduces correct procedures.
* Limited support for roaming (Diameter introduces mechanisms for secure and scalable roaming).
* No extension possible (Diameter allows extension - new commands and AVPs to be defined).
Diameter offers all of the capabilities of the RADIUS protocol, and is compatible with RADIUS.
It can also define extensions, or "Applications".
Each application may introduce new types of messages, AVP codes, and state machines.
The Message and AVP codes are assigned by the .
Each application has its own Application ID and Vendor ID that is used to distinguish between applications.
Application code is used to signal to other peers which operations are supported by the connecting peer (Capabilities Exchange / Negotiation).
:leveloffset: +1
include::Section-Introduction-Message_Format.adoc[]
:leveloffset: -1
[[_introduction_contents]]
== Contents
&THIS.PLATFORM;Diameter core is built on top of three basic components:
Stack::
Extensible Diameter Stack.
It provides basic session support along with application specific sessions.
Multiplexer (MUX)::
Diameter Stack multiplexer.
Allows different listeners to share the same stack instance.
Dictionary::
Diameter Message and AVP Dictionary.
Provides an API to access information about AVPs.
Dictionary is embeded in the MUX.
================================================
FILE: core/docs/sources-asciidoc/src/main/asciidoc/Chapter-JDiameter.adoc~
================================================
[[_jdiameter]]
= {this-platform} Diameter Stack
The Diameter Stack is the core component of the presented Diameter solution.
It performs all necessary tasks to allow user interaction with the Diameter network.
It manages the state of diameter peers and allows to route messages between them.
For more details, refer to http://tools.ietf.org/html/rfc3588[RFC 3588].
The Diameter Stack currently supports the following application sessions:
* Base
* Credit Control Application (CCA)
* Sh
* Ro
* Rf
* Cx/Dx
* Gx
* Gq'
* Rx
:leveloffset: 1
include::Section-JDiameter-Design_Overview.adoc[]
:leveloffset: 0
:leveloffset: 1
include::Section-JDiameter-Setup.adoc[]
:leveloffset: 0
:leveloffset: 1
include::Section-JDiameter-Configuration.adoc[]
:leveloffset: 0
:leveloffset: 1
include::Section-JDiameter-Source_Overview.adoc[]
:leveloffset: 0
:leveloffset: 1
include::Section-JDiameter-Validator.adoc[]
:leveloffset: 0
================================================
FILE: core/docs/sources-asciidoc/src/main/asciidoc/Chapter-MUX.adoc~
================================================
[[_mux]]
= Multiplexer (MUX)
The Multiplexer (MUX) is designed as a stack wrapper.
It serves two purposes:
Expose Stack::
It exposes the stack and allows it to be shared between multiple listeners.
The stack follows the life cycle of the MUX.
It is created and destroyed with MUX.
Expose Management Operations::
Exposes the management operations for clients, one of them being the &MANAGEMENT.PLATFORM; Console.
For specific information please refer to the &THIS.PLATFORM; Diameter Management Console User Guide.
:leveloffset: +1
include::Section-MUX-Design_Overview.adoc[]
:leveloffset: -1
:leveloffset: +1
include::Section-MUX-Setup.adoc[]
:leveloffset: -1
:leveloffset: +1
include::Section-MUX-Configuration.adoc[]
:leveloffset: -1
:leveloffset: +1
include::Section-MUX-Source_Overview.adoc[]
:leveloffset: -1
:leveloffset: +1
include::Section-MUX-Dictionary.adoc[]
:leveloffset: -1
================================================
FILE: core/docs/sources-asciidoc/src/main/asciidoc/Diameter_User_Guide.adoc~
================================================
= User Guide to {this-platform} {this-application} {project-version}
:doctype: book
:sectnums:
:toc: left
:icons: font
:experimental:
:sourcedir: .
:leveloffset: 1
include::Book_Info.adoc[]
:leveloffset: 0
:leveloffset: 1
include::common/Preface.adoc[]
:leveloffset: 0
:leveloffset: 1
include::Chapter-Introduction.adoc[]
:leveloffset: 0
:leveloffset: 1
include::Chapter-JDiameter.adoc[]
:leveloffset: 0
:leveloffset: 1
include::Chapter-MUX.adoc[]
:leveloffset: 0
:leveloffset: 1
include::Revision_History.adoc[]
:leveloffset: 0
================================================
FILE: core/docs/sources-asciidoc/src/main/asciidoc/Section-Introduction-Message_Format.adoc~
================================================
[[_mf_message_format]]
= Message Format
Diameter is a byte based protocol.
Each message has a fixed structure, which consists of two parts: header and payload.
The message header structure is common for every message.
The content is fixed, as is the length.
Message header content includes the code, application and certain bit flags, which helps identify the message in Diameter scope.
The message payload is built up of AVPs.
Its content differs for each command and application, though they all define the Session-ID AVP as mandatory.
.Diameter Message Structure
image::images/dia-Introduction-dia-DiameterPacketFormat.png[]
The header has the following fields:
.Message Headers
Version::
Indicates the Diameter protocol version.
This value is always set to `1`.
Message Length::
Indicates the Diameter message length, including the header fields.
Flags::
Composed by eight bits, to provide information regarding the message.
The first four bits in the flags octet have the following meaning:
* R = The message is a request (1) or an answer (0).
* P = The message is proxiable (1) and may be proxied, relayed or redirected, or it must be processed locally (0).
* E = The message is an error message (1) or a regular message (0).
* T = The message is potentially being re-transmitted (1) or being sent for the first time (0).
The last four bits are reserved for future use, and should be set to 0.
Command Code::
Indicates the command associated with the message.
Application-ID::
Identifies the application to which the message is applicable for.
The application is an authentication, accounting, or vendor specific application.
The `application-id` in the header must be the same as what is contained in any relevant AVPs in the message.
Hop-by-Hop ID::
A unique ID that is used to match requests and answers.
The header field of the answer message must contain the same value present in the corresponding request.
This is how answers are routed back to the peer that sent the message.
End-to-End ID::
A time-limited unique ID that is used to to detect duplicate messages.
The ID must be unique for at least four minutes.
The answer message originator must ensure that this header contains the same value present in the corresponding request.
The message payload is built up from AVPs.
Each AVP has a similar structure: a header, and encoded data.
Data can be simple (eg, integer, long) or complex (another encoded AVP).
.Payload Structure
image::images/dia-Introduction-dia-DiameterAVPLayout.png[]
.Payload AVPs
AVP Code::
Uniquely identifies the attribute, by combining the specified code with the value contained within the Vendor-ID header field.
AVP numbers 1 to 255 are reserved for RADIUS backwards compatibility, and do not require the Vendor-ID header field. AVP numbers 256 and above are used exclusively for the Diameter protocol, and are allocated by IANA.
Flags::
Bit flags that specify how each attribute must be handled.
Flags octets have the following structure: V M P r r r r r.
A full description is available in http://tools.ietf.org/html/rfc3588#section-4.1[Section 4.1 of RFC3588].
The first three bits have the following meaning:
* V If set, indicates that optional octets (Vendor-ID) is present in AVP header.
* M If set, it indicates that receiveing peer must understand this AVP or send error answer.
* P If set, it indicates the need for encryption for end-to-end security.
The last 5 bits are reserved for future use, and should be set to 0.
AVP Length::
Indicates the number of octets in the AVP, including the following information:
Vendor-ID::
An optional octet that identifies the AVP in application space.
AVP code and AVP Vendor-ID create a unique identifier for the AVP.
================================================
FILE: core/docs/sources-asciidoc/src/main/asciidoc/Section-JDiameter-Configuration.adoc~
================================================
[[_jdiameter_configuration]]
= Diameter Stack Configuration
The stack is initially configured by parsing an XML file.
The top level structure of the file is described below.
Further explanation of each child element, and the applicable attributes, is provided later in this section.
[source,xml]
----
----
[source,xml]
----
----
The element contains parameters that affect the local Diameter peer.
The available elements and attributes are listed for reference.
. Elements and Attributes
::
Specifies the URI for the local peer.
The URI has the following format: "aaa://FQDN:port".
::
Contains one or more child element, which contain a single, valid IP address for the local peer, stored in the [parameter]`value` attribute of the IPAddress.
::
Specifies the realm of the local peer, using the [parameter]`value` attribute.
::
Specifies a numeric identifier that corresponds to the vendor ID allocated by IANA.
::
Specifies the name of the local peer product.
::
Specifies the version of the firmware.
::
Optional parent element containing child elements that specify settings relating to the Overload Monitor.
::
Supports child elements that specify the ID of the tracked application(s). It also supports the following properties:
index
Defines the index of this overload monitor, so priorities/orders can be specified.
lowThreshold
The low threshold for activation of the overload monitor.
highThreshold
The high threshold for activation of the overload monitor.
::
Parent element containing child elements that specify information about the application.
The child elements create a unique application identifier.
The child elements are:
Specifies the vendor ID for application definition. It supports a single property: "value".
The Authentication Application ID for application definition. It supports a single property: "value".
The Account Application ID for application definition. It supports a single property: "value".
::
Contains a child element , which defines the list of default supported applications.
It is used for the server side, when the stack is configured to accept incoming calls and there is an empty list of preconfigured peers (server is configured to accept any connection).
[source,xml]
----
----
The element contains elements that specify parameters for the Diameter stack.
The available elements and attributes are listed for reference.
If not specified otherwise, each tag supports a single property - "value", which indicates the value of the tag.
. Elements and Attributes
::
Specifies whether the stack will accept connections from undefined peers.
The default value is `false`.
::
Specifies whether duplicate message protection is enabled.
The default value is `false`.
::
Specifies the time each duplicate message is valid for (in extreme cases, it can live up to 2 * DuplicateTimer - 1 milliseconds). The default, minimum value is `240000` (4 minutes in milliseconds).
::
Specifies the number of requests stored for duplicate protection.
The default value is `5000`.
::
Determines whether the URI should be used as FQDN.
If it is set to `true`, the stack expects the destination/origin host to be in the format of "aaa://isdn.domain.com:3868" rather than the normal "isdn.domain.com". The default value is `false`.
::
Determines how many tasks the peer state machine can have before rejecting the next task.
This queue contains FSM events and messaging.
::
Determines the timeout for messages other than protocol FSM messages.
The delay is in milliseconds.
::
Determines how long the stack waits for all resources to stop.
The delays are in milliseconds.
::
Determines how long it takes for CER/CEA exchanges to timeout if there is no response.
The delays are in milliseconds.
::
Determines how long the stack waits to retry the communication with a peer that has stopped answering DWR messages.
The delay is in milliseconds.
::
Determines how long it takes for a DWR/DWA exchange to timeout if there is no response.
The delay is in milliseconds.
::
Determines how long it takes for a DPR/DPA exchange to timeout if there is no response.
The delay is in milliseconds.
::
Determines how long it takes for the reconnection procedure to timeout.
The delay is in milliseconds.
::
Determines the number of threads for handling events in the Peer FSM.
::
Controls the thread pool sizes for different aspects of the stack.
It supports multiple [parameter]`Entity` child elements. [parameter]`Entity` elements configure thread groups.
These elements support the following properties:
name
Specifies the name of the entity.
size
Specifies the thread pool size of the entity.
The default supported entities are:
ThreadGroup
Determines the maximum thread count in other entities.
ProcessingMessageTimer
Determines the thread count for message processing tasks.
DuplicationMessageTimer
Specifies the thread pool for identifying duplicate messages.
RedirectMessageTimer
Specifies the thread pool for redirecting messages that do not need any further processing.
PeerOverloadTimer
Determines the thread pool for managing the overload monitor.
ConnectionTimer
Determines the thread pool for managing tasks regarding peer connection FSM.
StatisticTimer
Determines the thread pool for statistic gathering tasks.
ApplicationSession
Determines the thread pool for managing the invocation of application session FSMs, which will invoke listeners.
[source,xml]
----
----
The element contains elements that specify parameters for external peers.
The available elements and attributes are listed for reference.
. Elements and Attributes
::
Parent element containing the child element , which specifies external peers and the way they connect.
specifies the name of external peers, whether they should be treated as a server or client, and what rating the peer has externally.
supports the following properties:
name
Specifies the name of the peer in the form of a URI. The structure is "aaa://[fqdn|ip]:port" (for example, "aaa://192.168.1.1:3868").
attempt_connect
Determines if the stack should try to connect to this peer. This property accepts boolean values.
rating
Specifies the rating of this peer in order to achieve peer priorities/sorting.
::
Parent element containing the child element , which specifies all realms that connect into the Diameter network.
contains attributes and elements that describe different realms configured for the Core.
It supports child elements, which define the applications supported.
supports the following parameters:
peers
Comma separated list of peers. Each peer is represented by an IP Address or FQDN.
local_action
Determines the action the Local Peer will play on the specified realm: Act as a LOCAL peer.
dynamic
Specifies if this realm is dynamic. That is, peers that connect to peers with this realm name will be added to the realm peer list if not present already.
exp_time
The time before a peer belonging to this realm is removed if no connection is available.
Below is an example configuration file for a server supporting the CCA, Sh and Ro Applications:
[source,xml]
----
----
[[_jdiameter_cluster_configuration]]
== Cluster configuration
The following list defines the requirements for enabling stack cluster mode
* Add the following entries to the `Parameters` section of [path]_jdiameter-config.xml_:
+
[source,xml]
----
org.mobicents.diameter.impl. ha.data.ReplicatedDataorg.mobicents.diameter.impl.ha. timer.ReplicatedTimerFacilityImpl
----
* A proper `JBoss Cache` configuration file: [path]_jdiameter-jbc.xml_ (located in the [path]_config_ directory).
+
The following content is sufficient for the JBoss Cache configuration file:
+
[source,xml]
----
----
================================================
FILE: core/docs/sources-asciidoc/src/main/asciidoc/Section-JDiameter-Setup.adoc~
================================================
[[_jdiameter_setup]]
= {this-platform} Diameter Stack Setup
[[_jdiameter_preinstall_requirements_and_prerequisites]]
== Pre-Install Requirements and Prerequisites
Ensure that the following requirements have been met before continuing with the install.
[[_jdiameter_hardware_requirements]]
=== Hardware Requirements
{this-platform} Diameter Stack does not have any hardware requirements.
[[_jdiameter_software_prerequisites]]
=== Software Prerequisites
{this-platform} Diameter Stack has the following software dependencies:
* Pico Container
* slf4j
Clustered setup also requires following:
* JDiameter HA
* JBoss Cache
[[_jdiameter_source_code]]
== Source Code
This section provides instructions on how to obtain and build the {this-platform} Diameter Stack from source code.
[[_jdiameter_release_source_building]]
=== Release Source Code Building
. Downloading the source code
+
IMPORTANT: Subversion is used to manage its source code.
Instructions for using Subversion, including install, can be found at http://svnbook.red-bean.com
+
Use SVN to checkout a specific release source, the base URL is {this-trunk-source-code-url} , then add the specific release version, lets consider &THIS.VERSION;.
+
[source]
----
[usr]$ git clone git@github.com:RestComm/jss7.git
----
. Building the source code
+
IMPORTANT: Maven 3.2.5 (or higher) is used to build the release.
Instructions for using Maven2, including install, can be found at http://maven.apache.org
+
Use Maven to build the deployable unit binary.
+
[source]
----
[usr]$ cd -
[usr]$ mvn install
----
+
Once the process finishes you should have the files deployed in maven archive.
[[_jdiameter_trunk_source_building]]
=== Development Trunk Source Building
Follow the process in <<_jdiameter_release_source_building>>, replacing the SVN source code URL with &THIS.JDIAMETER_TRUNK_SOURCE_CODE_URL;.
================================================
FILE: core/docs/sources-asciidoc/src/main/asciidoc/Section-JDiameter-Source_Overview.adoc~
================================================
[[_jdiameter_source_overview]]
= Diameter Stack Source overview
Diameter stack is built with the following basic components:
Session Factory::
The Session Factory governs the creation of sessions - raw and specific application sessions.
Raw and Application Sessions::
Sessions govern stateful message routing between peers.
Specific application sessions consume different type of messages and act differently based on the data present.
Stack::
The Stack governs all necessary components, which are used to establish connection and communicate with remote peers.
NOTE: For more detailed information, please refer to the Javadoc or the simple examples that can be found here: https://github.com/RestComm/jdiameter/tree/master/testsuite/load[Git Testsuite HEAD].
[[_jdiameter_source_overview_session_factory]]
== Session Factory
[class]`SessionFactory` provides the stack user with access to session objects.
It manages registered application session factories in order to allow for the creation of specific application sessions.
A Session Factory instance can be obtained from the stack using the [method]`getSessionFactory()` method.
The base [class]`SessionFactory` interface is defined below:
[source,java]
----
package org.jdiameter.api;
import org.jdiameter.api.app.AppSession;
public interface SessionFactory {
RawSession getNewRawSession() throws InternalException;
Session getNewSession() throws InternalException;
Session getNewSession(String sessionId) throws InternalException;
T getNewAppSession(ApplicationId applicationId,
Class extends AppSession> userSession) throws InternalException;
T getNewAppSession(String sessionId, ApplicationId
applicationId, Class extends AppSession> userSession) throws InternalException;
}
----
However, since the stack is extensible, it is safe to cast the [class]`SessionFactory` object to this interface:
[source,java]
----
package org.jdiameter.client.api;
public interface ISessionFactory extends SessionFactory {
T getNewAppSession(String sessionId,
ApplicationId applicationId, java.lang.Class extends AppSession>
aClass, Object... args) throws InternalException;
void registerAppFacory(Class extends AppSession> sessionClass,
IAppSessionFactory factory);
void unRegisterAppFacory(Class extends AppSession> sessionClass);
IConcurrentFactory getConcurrentFactory();
}
----
[method]`RawSession getNewRawSession() throws InternalException;`::
This method creates a [class]`RawSession`.
Raw sessions are meant as handles for code performing part of the routing decision on the stack's, such as rely agents for instance.
[method]`Session getNewSession() throws InternalException;`::
This method creates a session that acts as the endpoint for peer communication (for a given session ID). It declares the method that works with the [class]`Request` and [class]`Answer` objects.
A session created with this method has an autogenerated ID.
It should be considered as a client session.
[method]`Session getNewSession(String sessionId) throws InternalException;`::
As above.
However, the created session has an ID equal to that passsed as an argument.
This created session should be considered a server session.
[method]` T getNewAppSession(ApplicationId applicationId, Class extends AppSession> userSession) throws InternalException;`::
This method creates a new specific application session, identified by the application ID and class of the session passed.
The session ID is generated by implementation.
New application sessions should be considered as client sessions.
It is safe to type cast the return value to class passed as an argument.
This method delegates the call to a specific application session factory.
[method]` T getNewAppSession(String sessionId, ApplicationId applicationId, Class extends AppSession> userSession) throws InternalException;`::
As above.
However, the session Id is equal to the argument passed.
New sessions should be considered server sessions.
[method]` T getNewAppSession(String sessionId, ApplicationId applicationId, java.lang.Class extends AppSession> aClass, Object... args) throws InternalException;`::
As above.
However, it allows the stack to pass some additional arguments.
Passed values are implementation specifc.
[method]`void registerAppFacory(Class extends AppSession> sessionClass, IAppSessionFactory factory);`::
Registers the [parameter]`factory` for a certain [parameter]`sessionClass`.
This factory will receive a delegated call when ever the [method]`getNewAppSession` method is called with an application class matching one from the register method.
[method]`void unRegisterAppFacory(Class extends AppSession> sessionClass);`::
Removes the application session factory registered for the [parameter]`sessionClass`.
.SessionFactory use example
====
[source,java]
----
class Test implements EventListener
{
....
public void test(){
Stack stack = new StackImpl();
XMLConfiguration config = new XMLConfiguration(new FileInputStream(new File(configFile));
SessionFactory sessionFactory = stack.init(config);
stack.start();
//perferctly legal, both factories are the same.
sessionFactor = stack.getSessionFactory();
Session session = sessionFactory.getNewSession();
session.setRequestListener(this);
Request r = session.createRequest(308,ApplicationId.createByAuth(100L,10101L),
"mobicents.org","aaa://uas.fancyapp.mobicents.org");
//add avps specific for app
session.send(r,this);
}
}
----
====
.SessionFactory use example
====
[source,java]
----
class Test implements EventListener
{
Stack stack = new StackImpl();
XMLConfiguration config = new XMLConfiguration(new FileInputStream(new File(configFile));
ISessionFactory sessionFactory = (ISessionFactory)stack.init(config);
stack.start();
//perferctly legal, both factories are the same.
sessionFactor = (ISessionFactory)stack.getSessionFactory();
sessionFactory.registerAppFacory(ClientShSession.class, new ShClientSessionFactory(this));
//our implementation of factory does not require any parameters
ClientShSession session = (ClientShSession) sessionFactory.getNewAppSession(null, null
, ClientShSession.class, null);
...
session.sendUserDataRequest(udr);
}
----
====
[[_jdiameter_source_overview_session]]
== Sessions
[class]`RawSessions`, [class]`Sessions` and [class]`ApplicationSessions` provide the means for dispatching and receiving messages.
Specific implementation of [class]`ApplicationSession` may provide non standard methods.
The [class]`RawSession` and the [class]`Session` life span is controlled entirely by the application.
However, the [class]`ApplicationSession` life time depends on the implemented state machine.
[class]`RawSession` is defined as follows:
[source,java]
----
public interface BaseSession extends Wrapper, Serializable {
long getCreationTime();
long getLastAccessedTime();
boolean isValid();
Future send(Message message) throws InternalException,
IllegalDiameterStateException, RouteException, OverloadException;
Future send(Message message, long timeOut, TimeUnit timeUnit)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void release();
}
public interface RawSession extends BaseSession {
Message createMessage(int commandCode, ApplicationId applicationId, Avp... avp);
Message createMessage(int commandCode, ApplicationId applicationId,
long hopByHopIdentifier, long endToEndIdentifier, Avp... avp);
Message createMessage(Message message, boolean copyAvps);
void send(Message message, EventListener listener)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void send(Message message, EventListener listener,
long timeOut, TimeUnit timeUnit) throws InternalException,
IllegalDiameterStateException, RouteException, OverloadException;
}
----
[method]`long getCreationTime();`::
Returns the time stamp of this session creation.
[method]`long getLastAccessedTime();`::
Returns the time stamp indicating the last sent or received operation.
[method]`boolean isValid();`::
Returns `true` when this session is still valid (ie, [method]`release()` has not been called).
[method]`void release();`::
Application calls this method to inform the user that the session should free any associated resource - it shall not be used anymore.
[method]`Future send(Message message)`::
Sends a message in async mode.
The [class]`Future` reference provides the means of accessing the answer once it is received
[method]`void send(Message message, EventListener listener, long timeOut, TimeUnit timeUnit)`::
As above.
Allows to specify the time out value for send operations.
[method]`Message createMessage(int commandCode, ApplicationId applicationId, Avp... avp);`::
Creates a Diameter message.
It should be explicitly set either as a request or answer.
Passed parameters are used to build messages.
[method]`Message createMessage(int commandCode, ApplicationId applicationId, long hopByHopIdentifier, long endToEndIdentifier, Avp... avp);`::
As above.
However, it also allows for the Hop-by-Hop and End-to-End Identifiers in the message header to be set.
This method should be used to create answers.
[method]`Message createMessage(Message message, boolean copyAvps);`::
Clones a message and returns the created object.
The copyAvps parameter defines whether basic AVPs (Session, Route and Proxy information) should be copied to the new object.
[method]`void send(Message message, EventListener listener)`::
Sends a message.
The answer will be delivered by the specified listener
[method]`void send(Message message, EventListener listener, long timeOut, TimeUnit timeUnit)`::
As above.
It also allows for the answer to be passed after timeout.
[class]`Session` defines similar methods, with exactly the same purpose:
[source,java]
----
public interface Session extends BaseSession {
String getSessionId();
void setRequestListener(NetworkReqListener listener);
Request createRequest(int commandCode, ApplicationId appId, String destRealm);
Request createRequest(int commandCode, ApplicationId appId, String destRealm, String destHost);
Request createRequest(Request prevRequest);
void send(Message message, EventListener listener)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void send(Message message, EventListener listener, long timeOut,
TimeUnit timeUnit) throws InternalException, IllegalDiameterStateException,
RouteException, OverloadException;
}
----
== Application Session Factories
In the table below, you can find session factories provided by current implementation, along with a short description:
.Application Factories
[cols="1,1,1,1", frame="all", options="header"]
|===
| Factory class
| Application type & id
| Application
| Reference
| RFC3588
| RFC3588
| RFC4006
| TS.29328, TS.29329
| TS.29228, TS.29229
| TS.29228, TS.29229
| TS.32240
| TS.32240
|===
NOTE: There is no specific factory for Ro and Rf.
Those applications reuse the respective session and session factories.
NOTE: Application IDs contain two numbers - [VendorId:ApplicationId].
IMPORTANT: Spaces have been introduced in the `Factory class` column values to correctly render the table.
Please remove them when using copy/paste.
================================================
FILE: core/docs/sources-asciidoc/src/main/asciidoc/Section-JDiameter-Validator-Configuration.adoc~
================================================
[[_jdiameter_validator_configuration]]
= Validator Configuration
The Validator is configured with a single XML file.
This file contains the structure definition for both messages and AVPs.
Upon creation of the Diameter Stack, the validator is initialized.
It performs the initialization by looking up the [path]_dictionary.xml_ file in classpath.
NOTE: The configuration file contains more data that `Validator` uses to build its data base.
This is because the `Dictionary` uses the same file to configure itself.
It reuses the AVP definitions, with some extra information like AVP type and flags.
The configuration file has the following structure:
[source,xml]
----
----
::
The root element that contains the child elements comprising the validator and dictionary components.
This element does not support any attributes.
::
Specifies whether message validation is activated for sent and received stack messages.
The element supports the following optional attributes:
enabled
Specifies whether the validator is activated or deactivated. If not specified, the validator is deactivated.
sendLevel
Determines the validation level for messages sent by the stack instance. Values determine if sent messages are not validated at all (OFF), only message level AVPs are checked (MESSAGE) or all AVPs are checked (ALL).
receiveLevel
Determines the validation level for messages received by the stack instance. Values determine if sent messages are not validated at all (OFF), only message level AVPs are checked (MESSAGE) or all AVPs are checked (ALL).
::
Optional element that specifies the mapping between the vendor name, vendor ID, and vendor code.
The element supports the following required attributes:
name
Specifies the vendor name. For example, "Hewlett Packard".
vendor-id
Specifies the unique ID associated with the vendor. For example, "HP".
code
Specifies the alpha-numeric code allocated to the vendor by IANA. For example, "11". The value must be unique for each declaration.
. XML Attributes
====
[source,xml]
----
...
----
====
::
Defines the simple Attribute Value Pair (AVP) types.
The element supports the following required attributes:
type-name
Specifies a type name in accordance with the acceptable base types defined in RFC 3588. For example; "Enumerated", "OctetString", "Integer32".
type-parent
Specifies the parent type name used to define the base characteristics of the type. The values are restricted to defined elements. For example; "OctetString", "UTF8String", "IPAddress".
. XML Attributes
====
[source,xml]
----
----
====
::
Defines the specific applications used within the dictionary.
Two child elements are supported by : and .
The element supports the following attributes:
id
Specifies the unique ID allocated to the application. The attribute is used in all messages and forms part of the message header.
name
Optional attribute that specifies the logical name of the application.
uri
Optional attribute that specifies a link to additional application information.
. XML Attributes
====
[source,xml]
----
----
====
::
Element containing information necessary to configure the Attribute Value Pairs. <<_table_avp_attributes>> contains the complete list of supported attributes, and their available values (if applicable).
The element supports a number of child elements that are used to set finer parameters for the individual AVP. The supported elements are , , and .
NOTE: Different sets of elements are supported by depending on its position in the dictionary.xml file.
. Child Elements and Attributes
====
[source,xml]
----
----
====
::
Child element of that is used to match the AVP with the AVP type as defined in the element.
The element supports the following mandatory attribute:
type-name
Specifies the type-name of the element. This is used to match the type-name value in the element.
NOTE: is ignored if the element contains the element.
::
Child element of that specifies the enumeration value for the specified AVP.
is used only when the type-name attribute of is specified.
The element supports the following mandatory attributes:
name
Specifies the name of a constant value that applies to the AVP.
code
Specifies the integer value associated with the name of the constant. The value is passed as a value of the AVP, and maps to the name attribute.
NOTE: is ignored if the element contains the element.
::
Child element of that specifies the AVP is a grouped type.
A grouped AVP is one that has no element present.
The element does not support any attributes, however the element is allowed as a child element.
The , which specifies a reference to a grouped AVP, supports one mandatory attribute:
name
Specifies the name of the grouped AVP member. The value must match the defined AVP name.
. Attributes
[cols="1,1,1", frame="all", options="header"]
|===
| Attribute Name (optional in brackets) | Explicit Values (default in brackets) | Description
| name | | Specifies the name of the AVP. This is used to match the AVP definition to any grouped AVP references. For further information about grouped AVPs, refer to the element description in this section.
| code | | Specifies the integer code of the AVP.
| (vendor-id) | (none) | Used to match the vendor ID reference to the value defined in the element.
| (multiplicity) | | Specifies the number of acceptable AVPs in a message using an explicit value.
| | 0 | An AVP must not be present in the message.
| | (0+) | Zero or more instances of the AVP must be present in the message.
| | 0-1 | Zero, or one instance of the AVP may be present in the message. An error occurs if the message contains more than one instance of the AVP.
| | 1 | One instance of the AVP must be present in the message.
| | 1+ | At least one instance of the AVP must be present in the message.
| may-encrypt | Yes \| (No) | Specifies whether the AVP can be encrypted.
| protected | may \| must \| mustnot | Determines actual state of AVP that is expected, if it MUST be encrypted , may or MUST NOT.
| vendor-bit | must \| mustnot | Specifies whether the Vendor ID should be set.
| mandatory | may \| must \| mustnot | Determines if support for this AVP is mandatory in order to consume/process message.
| vendor | | Specifies the defined vendor code, which is used by the child element
|===
. XML Attributes
====
[source,xml]
----
----
====
::
Specifies the command for the application.
The element supports the element, which specifies the structure of the command.
The element supports the following attributes:
NOTE: If the element is specified in , it does not support any child elements.
The element only refers to defined AVPs when used in this context.
. Elements and Attributes
====
[source,xml]
----
----
====
================================================
FILE: core/docs/sources-asciidoc/src/main/asciidoc/Section-JDiameter-Validator-Source_Overview.adoc~
================================================
[[_jdiameter_validator_source_overview]]
= Validator Source Overview
The Validator API defines methods to access its database of AVPs and check if the AVP and message have the proper structure.
The Validator is currently message oriented.
This means that it declares methods that center on message consistency checks.
The class containing all validation logic is [class]`org.jdiameter.common.impl.validation.DiameterMessageValidator`.
It exposes the following methods:
public boolean isOn();::
Simple method to determine if the `Validator` is enabled.
public ValidatorLevel getSendLevel();
::
Returns the validation level of outgoing messages.
It can have one of the following values: `OFF`, `MESSAGE`, `ALL`.
public ValidatorLevel getReceiveLevel()::
Returns the validation level of incoming messages.
It can have one of the following values: `OFF`, `MESSAGE`, `ALL`.
public void validate(Message msg, boolean incoming) throws JAvpNotAllowedException::
Performs validation on a message.
Based on the [parameter]`incoming` flag, the correct validation level is applied.
If validation fails, an exception with details is thrown.
public void validate(Message msg, ValidatorLevel validatorLevel) throws JAvpNotAllowedException::
Performs validation on messages with a specified level.
It is a programatical way to allow different levels of validation from those configured.
If validation fails, a [class]`JAvpNotAllowedException` with details is thrown.
NOTE: The current implementation provides more methods, however those are out of scope for this documentation.
A simple example of a Validator use case is shown below:
.Validator Message Check Example
====
The example below is pseudo-code.
[source,java]
----
...
boolean isRequest = true;
boolean isIncoming = false;
DiameterMessageValidator messageValidator = DiameterMessageValidator.getInstance();
Message message = createMessage(UserDataRequest.MESSAGE_CODE, isRequest,
applicationId);
//add AVPs
...
//perform check
try{
messageValidator.validate(message, isIncoming);
}
catch(JAvpNotAllowedException e) {
System.err.println("Failed to validate ..., avp code: " + e.getAvpCode() + " avp vendor:" + e.getVendorId() + ", message:" + e.getMessage());
}
----
====
================================================
FILE: core/docs/sources-asciidoc/src/main/asciidoc/Section-JDiameter-Validator.adoc~
================================================
[[_jdiameter_validator]]
= Diameter Stack Validator
Validator is one of the Stack features.
The primary purpose of the Validator is to detect malformed messages, such as an Answer message containing a Destination-Host Attribute Value Pair (AVP).
The Validator is capable of validating multi-leveled, grouped AVPs, excluding the following content types:
* URI, or Identifier types.
* Enumerated types against defined values.
The Validator is only capable of checking structural integrity, not the content of the message.
The Validator performs the following checks:
Index::
Checks that the AVPs are in the correct place.
For example, `Session-Id` must always be encoded before any other AVP.
Multiplicity::
Checks that the message AVPs occur the proper number of times.
For example, the Session-ID should only be present once.
The `Validator` is called by the stack implementation.
It is invoked after the message is received, but before it is dispatched to a remote peer.
NOTE: This means that if the peer does not exist in the local peer table, the validator is not called, as the stack fails before calling it.
:leveloffset: 1
include::Section-JDiameter-Validator-Configuration.adoc[]
:leveloffset: 0
:leveloffset: 1
include::Section-JDiameter-Validator-Source_Overview.adoc[]
:leveloffset: 0
================================================
FILE: core/docs/sources-asciidoc/src/main/asciidoc/Section-MUX-Setup.adoc~
================================================
[[_mux_setup]]
= Diameter Multiplexer (MUX) Setup
[[_mux_preinstall_requirements_and_prerequisites]]
== Pre-Install Requirements and Prerequisites
Ensure that the following requirements have been met before continuing with the installation process.
[[_mux_hardware_requirements]]
=== Hardware Requirements
MUX does not have any hardware requirements.
[[_mux_software_prerequisites]]
=== Software Prerequisites
MUX must be deployed either in {jee-version} v4.x or v5.x.
However it is possible to adapt configuration files and run in any JMX container.
[[_mux_source_code]]
== Source Code
This section provides instructions on how to obtain and build the {this-platform} Diameter MUX from source code.
[[_mux_release_source_building]]
=== Release Source Code Building
. Downloading the source code
+
IMPORTANT: Subversion is used to manage its source code.
Instructions for using Subversion, including installation, can be found at http://svnbook.red-bean.com.
+
Use SVN to checkout a specific release source.
The base URL is {this-trunk-source-code-url} .
Then add the specific release version, for example {project-version} .
+
[source]
----
[usr]$ git clone git@github.com:RestComm/jdiameter.git
----
. Building the source code
+
IMPORTANT: Maven 3.2.5 (or higher) is used to build the release.
Instructions for using Maven2, including installation, can be found at http://maven.apache.org.
+
Use Maven to build the deployable unit binary.
+
[source]
----
[usr]$ cd -
[usr]$ mvn install
----
+
Once the process finishes you should have the SAR built.
If the [var]`JBOSS_HOME` environment variable is set, the will be deployed in the container after execution.
NOTE: By default {this-platform} Diameter MUX; deploys in the {jee-version} v5.x .
To change it, run [app]`maven` with the profile switch command: [parameter]`-Pjboss4`.
[[_mux_trunk_source_building]]
=== Development Trunk Source Building
Follow the <<_mux_release_source_building>> procedure, replacing the SVN source code URL with {this-trunk-source-code-url} .
================================================
FILE: core/docs/sources-asciidoc/src/main/asciidoc/Section-MUX-Source_Overview.adoc~
================================================
[[_mux_source_overview]]
= Diameter MUX Source Overview
The Diameter MUX capabilities are defined by the `MBean` interface `org.mobicents.diameter.stack.DiameterStackMultiplexerMBean`.
This interface defines two types of methods:
Management::
Used by &MANAGEMENT.PLATFORM;console.
These methods are outside the scope of this documentation.
Stack Accessors::
Methods that allow the user to retrieve and use a wrapped stack.
The methods below are of interest to a Diameter MUX user:
[method]`public Stack getStack();`::
Returns a stack wrapped by the multiplexer.
It is present as a convenience method, and the stack should only be changed directly by expert users.
[method]`public void registerListener(DiameterListener listener, ApplicationId[] appIds) throws IllegalStateException;`::
Registers a listener to be triggered when a message for a certain application ID is received.
[method]`public void unregisterListener(DiameterListener listener);`::
Removes the message listener.
[method]`public DiameterStackMultiplexerMBean getMultiplexerMBean();`::
Returns the actual instance of MUX.
The listener interface is defined below:
[source,java]
----
package org.mobicents.diameter.stack;
import java.io.Serializable;
import org.jdiameter.api.Answer;
import org.jdiameter.api.EventListener;
import org.jdiameter.api.NetworkReqListener;
import org.jdiameter.api.Request;
public interface DiameterListener extends NetworkReqListener, Serializable,
EventListener
{
}
----
MUX can be used as follows:
[source,java]
----
public class DiameterActor implements DiameterListener
{
private ObjectName diameterMultiplexerObjectName = null;
private DiameterStackMultiplexerMBean diameterMux = null;
private synchronized void initStack() throws Exception {
this.diameterMultiplexerObjectName =
new ObjectName("diameter.mobicents:service=DiameterStackMultiplexer");
Object[] params = new Object[]{};
String[] signature = new String[]{};
String operation = "getMultiplexerMBean";
this.diameterMux=mbeanServer.invoke(this.diameterMultiplexerObjectName, operation,
params, signature);
long acctAppIds = new long[]{19312L};
long acctVendorIds = new long[]{193L};
long authAppIds = new long[]{4L};
long authVendorIds = new long[]{0L};
List appIds = new ArrayList();
for(int index = 0;index 1000){
headerSize($scroll);
}else{
logoSizeOnSmallScreens();
}
if($j(window).width() > 768){
contentMenuPosition();
}
contentMenuCheckLastSection();
$j('header:not(.stick_with_left_right_menu) .q_logo a').css('visibility','visible');
/* set header and content menu position and appearance on page load - END */
initFullScreenTemplate();
showHideVerticalMenu();
initMasonryGallery();
initLoadNextPostOnBottom();
});
$j(window).load(function(){
"use strict";
$j('.touch .main_menu li:has(div.second)').doubleTapToGo(); // load script to close menu on touch devices
initSmallImageBlogHeight();
setDropDownMenuPosition();
initDropDownMenu();
initPortfolio();
initPortfolioZIndex();
initPortfolioSingleInfo();
initTestimonials();
initVideoBackgroundSize();
initBlog();
initBlogMasonryFullWidth();
initQBlog();
initPortfolioMasonry();
initPortfolioMasonryFilter();
initTabs();
countClientsPerRow();
animatedTextIconHeight();
countAnimatedTextIconPerRow();
initTitleAreaAnimation();
setContentBottomMargin();
footerWidth();
if($j('nav.content_menu').length > 0){
content_menu_position = $j('nav.content_menu').offset().top;
contentMenuPosition();
}
contentMenuCheckLastSection();
initQodeCarousel();
initPortfolioSlider();
initBlogSlider();
initTabsActiveBorder();
setActiveTabBorder();
initImageHover();
$j('header.stick_with_left_right_menu .q_logo a').css('visibility','visible');
setMargingsForLeftAndRightMenu();
initImageGallerySliderNoSpace();
initVerticalSplitSlider();
initParallax(); //has to be here on last place since some function is interfering with parallax
initQodeElementAnimationSkrollr();
setTimeout(function(){
checkAnchorOnScroll();
checkAnchorOnLoad(); // it has to be after content top margin initialization to know where to scroll
checkHeaderStyleOnScroll(); //moved to window load because sections are not fully initialized on dom ready and calculations are wrong
if($j('.no-touch .carousel').length){skrollr_slider.refresh();} //in order to reload rest of scroll animation on same page after page loads
},700); //timeout is set because of some function that interferes with calculating
});
$j(window).scroll(function() {
"use strict";
$scroll = $j(window).scrollTop();
if($j(window).width() > 1000){
headerSize($scroll);
}
if($j(window).width() > 768){
contentMenuPosition();
}
contentMenuCheckLastSection();
checkVerticalMenuTransparency();
$j('.touch .drop_down > ul > li').mouseleave();
$j('.touch .drop_down > ul > li').blur();
});
$j(window).resize(function() {
"use strict";
$window_width = $j(window).width();
$window_height = $j(window).height();
//check paspartu width depending on window size
paspartu_width = $window_width < 1024 ? 0.02 : paspartu_width_init;
if($j(window).width() > 1000){
headerSize($scroll);
}else{
logoSizeOnSmallScreens();
}
initMessageHeight();
initTestimonials();
fitAudio();
initSmallImageBlogHeight();
initBlog();
initBlogMasonryFullWidth();
initQBlog();
animatedTextIconHeight();
countAnimatedTextIconPerRow();
initVideoBackgroundSize();
countClientsPerRow();
setContentBottomMargin();
footerWidth();
calculateHeights();
$j('.vertical_split_slider').height($window_height); //used for vertical split slider holder
initMasonryGallery();
contentMinHeight();
contentMinHeightWithPaspartu();
});
/*
** Calculating header size on page load and page scroll
*/
var sticky_animate;
function headerSize($scroll){
"use strict";
if(($j('header.page_header').hasClass('scroll_top')) && ($j('header.page_header').hasClass('has_top')) &&
($j('header.page_header').hasClass('fixed') || $j('header.page_header').hasClass('fixed_hiding'))){
if($scroll >= 0 && $scroll <= 34){
$j('header.page_header').css('top',-$scroll);
$j('header.page_header').css('margin-top',0);
$j('.header_top').show();
}else if($scroll > 34){
$j('header.page_header').css('top','-34px');
$j('header.page_header').css('margin-top',34);
$j('.header_top').hide();
}
}
//is scroll amount for sticky set on page?
if(typeof page_scroll_amount_for_sticky !== 'undefined') {
sticky_amount = page_scroll_amount_for_sticky;
}
//do we have slider on the page?
else if($j('.carousel.full_screen').length) {
sticky_amount = $j('.carousel').height();
}
//take value from theme options
else {
sticky_amount = scroll_amount_for_sticky;
}
if($j('header').hasClass('regular')){
// $j('header .drop_down .second').css('top', header_height + header_bottom_border_weight +'px');
if(header_height - logo_height >= 10){
$j('.q_logo a').height(logo_height);
}else{
$j('.q_logo a').height(header_height - 10);
}
$j('.q_logo a img').css('height','100%');
}
if($j('header.page_header').hasClass('fixed')){
if($j('header.page_header').hasClass('scroll_top')){
$top_header_height = 34;
}else{
$top_header_height = 0;
}
if((header_height - $scroll + $top_header_height >= min_header_height_scroll) && ($scroll >= $top_header_height)){
$j('header.page_header').removeClass('scrolled');
$j('header:not(.centered_logo.centered_logo_animate) nav.main_menu > ul > li > a').css('line-height', header_height - $scroll + $top_header_height+'px');
// $j('header .drop_down .second').css('top', header_height + header_bottom_border_weight - ($scroll + $top_header_height)/8+'px');
$j('header:not(.centered_logo.centered_logo_animate) .side_menu_button').css('height', header_height - $scroll + $top_header_height+'px');
$j('header:not(.centered_logo.centered_logo_animate) .shopping_cart_inner').css('height', header_height - $scroll + $top_header_height+'px');
$j('header:not(.centered_logo.centered_logo_animate) .logo_wrapper').css('height', header_height - $scroll + $top_header_height +'px');
if(header_height - logo_height > 0){
$j('header:not(.centered_logo.centered_logo_animate) .q_logo a').css('height', logo_height +'px');
}else{
$j('header:not(.centered_logo.centered_logo_animate) .q_logo a').css('height', (header_height - $scroll + $top_header_height - 10) +'px');
}
}else if($scroll < $top_header_height){
$j('header.page_header').removeClass('scrolled');
$j('header:not(.centered_logo.centered_logo_animate) nav.main_menu > ul > li > a').css('line-height', header_height+'px');
// $j('header .drop_down .second').css('top', header_height + header_bottom_border_weight +'px');
$j('header:not(.centered_logo.centered_logo_animate) .side_menu_button').css('height', header_height+'px');
$j('header:not(.centered_logo.centered_logo_animate) .shopping_cart_inner').css('height', header_height+'px');
$j('header:not(.centered_logo.centered_logo_animate) .logo_wrapper').css('height', header_height+'px');
if(header_height - logo_height > 0){
$j('header:not(.centered_logo.centered_logo_animate) .q_logo a').css('height', logo_height +'px');
}else{
$j('header:not(.centered_logo.centered_logo_animate) .q_logo a').css('height', (header_height-10)+'px');
}
}else if((header_height - $scroll + $top_header_height) < min_header_height_scroll){
$j('header.page_header').addClass('scrolled');
$j('header:not(.centered_logo.centered_logo_animate) nav.main_menu > ul > li > a').css('line-height', min_header_height_scroll+'px');
// $j('header .drop_down .second').css('top', min_header_height_scroll + header_bottom_border_weight +'px');
$j('header:not(.centered_logo.centered_logo_animate) .side_menu_button').css('height', min_header_height_scroll+'px');
$j('header:not(.centered_logo.centered_logo_animate) .shopping_cart_inner').css('height', min_header_height_scroll+'px');
$j('header:not(.centered_logo.centered_logo_animate) .logo_wrapper').css('height', min_header_height_scroll+'px');
if(min_header_height_scroll - logo_height > 0){
$j('header:not(.centered_logo.centered_logo_animate) .q_logo a').css('height', logo_height +'px');
}else{
$j('header:not(.centered_logo.centered_logo_animate) .q_logo a').css('height', (min_header_height_scroll-10)+'px');
}
}
// logo part - start //
if($j('header.page_header').hasClass('centered_logo') && $j('header.page_header').hasClass('centered_logo_animate')){
if((header_height - $scroll + $top_header_height < logo_height) && (header_height - $scroll + $top_header_height >= min_header_height_scroll) && (logo_height > min_header_height_scroll - 10) && ($scroll >= $top_header_height)){
$j('.q_logo a').height(header_height - $scroll + $top_header_height - 10);
}else if((header_height - $scroll + $top_header_height < logo_height) && (header_height - $scroll + $top_header_height >= min_header_height_scroll) && (logo_height > min_header_height_scroll - 10) && ($scroll < $top_header_height)){
$j('.q_logo a').height(header_height - 10);
}else if((header_height - $scroll + $top_header_height < logo_height) && (header_height - $scroll + $top_header_height < min_header_height_scroll) && (logo_height > min_header_height_scroll - 10)){
$j('.q_logo a').height(min_header_height_scroll - 10);
}else if((header_height - $scroll + $top_header_height < logo_height) && (header_height - $scroll + $top_header_height < min_header_height_scroll) && (logo_height < min_header_height_scroll - 10)){
$j('.q_logo a').height(logo_height);
}else if(($scroll + $top_header_height === 0) && (logo_height > header_height - 10)){
$j('.q_logo a').height(logo_height);
}else{
$j('.q_logo a').height(logo_height);
}
}else if($j('header.page_header').hasClass('centered_logo')) {
$j('.q_logo a').height(logo_height);
$j('.q_logo img').height('auto');
}else{
$j('.q_logo img').height('100%');
}
// logo part - end //
}
if($j('header.page_header').hasClass('fixed_hiding')){
if($scroll < scroll_amount_for_fixed_hiding){
$j('header.page_header').removeClass('scrolled');
}else{
$j('header.page_header').addClass('scrolled');
}
$j('.q_logo a').height(logo_height/2); //because of retina displays
$j('.q_logo img').height('100%');
}
if($j('header.page_header').hasClass('stick') || $j('header.page_header').hasClass('stick_with_left_right_menu')){
if($scroll > sticky_amount){
if(!$j('header.page_header').hasClass('sticky')){
if($j('header.page_header').hasClass('has_top')){
$top_header_height = 34;
}else{
$top_header_height = 0;
}
var padding_top = $j('header.page_header').hasClass('centered_logo') ? $j('header.page_header').height() : header_height + $top_header_height;
if($j('header.page_header').hasClass('menu_bottom')){
padding_top = header_height + 60; //60 is menu height for Sticky Advance header type
}
$j('header.page_header').addClass('sticky');
$j('.content').css('padding-top',padding_top);
window.clearTimeout(sticky_animate);
sticky_animate = window.setTimeout(function(){$j('header.page_header').addClass('sticky_animate');},100);
if(min_header_height_sticky - logo_height >= 10){
$j('.q_logo a').height(logo_height);
}else{
$j('.q_logo a').height(min_header_height_sticky - 10);
}
if($j('header.page_header').hasClass('menu_bottom')){
initDropDownMenu(); //recalculate dropdown menu position
}
}
// logo part - start //
if(min_header_height_sticky - logo_height >= 10){
$j('.q_logo a').height(logo_height);
}else{
$j('.q_logo a').height(min_header_height_sticky - 10);
}
// logo part - end //
}else{
if($j('header.page_header').hasClass('sticky')){
$j('header').removeClass('sticky_animate');
$j('header').removeClass('sticky');
$j('.content').css('padding-top','0px');
if($j('header.page_header').hasClass('menu_bottom')){
initDropDownMenu(); //recalculate dropdown menu position
}
}
setMargingsForLeftAndRightMenu(); //need to set margins here since on sticky menu, logo is not visible on left/right logo
// logo part - start //
if(!$j('header.page_header').hasClass('centered_logo')){
if(header_height - logo_height >= 10){
$j('.q_logo a').height(logo_height);
}else{
$j('.q_logo a').height(header_height - 10);
}
}else{
$j('.q_logo a').height(logo_height);
$j('.q_logo img').height('auto');
}
$j('.q_logo a img').css('height','100%');
// logo part - end //
}
}
}
function setMargingsForLeftAndRightMenu(){
"use strict";
if($j('header.page_header').hasClass('stick_with_left_right_menu') && !$j('header.page_header').hasClass('left_right_margin_set')){
var logo_width = $j('.q_logo a img').width()/2;
if($scroll == 0 && logo_width != 0){
$j('header.page_header').addClass('left_right_margin_set');
}
$j('.logo_wrapper').width(logo_width*2);
$j('nav.main_menu.left_side > ul > li:last-child').css('margin-right',logo_width);
$j('nav.main_menu.right_side > ul > li:first-child').css('margin-left',logo_width);
$j('.rtl nav.main_menu.left_side > ul > li:first-child').css('margin-right',logo_width); // add for rtl
$j('.rtl nav.main_menu.left_side > ul > li:last-child').css('margin-right',0); // add for rtl
$j('.rtl nav.main_menu.right_side > ul > li:last-child').css('margin-left',logo_width); // add for rtl
$j('.rtl nav.main_menu.right_side > ul > li:first-child').css('margin-left',0); // add for rtl
}
}
/*
** Calculating logo size on smaller screens
*/
function logoSizeOnSmallScreens(){
"use strict";
// 100 is height of header on small screens
if((100 - 20 < logo_height)){
$j('.q_logo a').height(100 - 20);
}else{
$j('.q_logo a').height(logo_height);
}
$j('.q_logo a img').css('height','100%');
$j('header.page_header').removeClass('sticky_animate sticky');
$j('.content').css('padding-top','0px');
}
/*
** Calculating minimal height for content
*/
function contentMinHeight(){
"use strict";
if($j('header .header_bottom').length || $j('header .bottom_header').length){
if($j('header .header_bottom').length){ var headerColorString = $j('header .header_bottom').css('background-color'); }
if($j('header .bottom_header').length){ var headerColorString = $j('header .bottom_header').css('background-color'); }
var headerTransparency = headerColorString.substring(headerColorString.indexOf('(') + 1, headerColorString.lastIndexOf(')')).split(/,\s*/)[3];
var haeder_add = headerTransparency == undefined && !$j('header.page_header').hasClass('transparent') ? $j('header.page_header').height() : 0;
$j('body .content').css('min-height',$window_height - haeder_add - $j('footer:not(.uncover)').height());
}
}
/*
** Calculating minimal height for content when paspartu is enabled
*/
function contentMinHeightWithPaspartu(){
"use strict";
if ($j('.paspartu_enabled').length) {
var content_height;
var paspartu_final_width_px = 0;
var paspartu_width_px = $window_width*paspartu_width;
var footer_height = $j('footer').height();
if ($j('.disable_footer').length){
footer_height = 0;
}
if ($j('.vertical_menu_enabled').length){
if ($j('.paspartu_top').length && $j('.paspartu_middle_inner').length){
paspartu_final_width_px += paspartu_width_px;
}
}
else {
if ($j('.paspartu_top').length){
paspartu_final_width_px += paspartu_width_px;
}
}
if ($j('.paspartu_bottom').length || !$j('.disable_bottom_paspartu').length){
paspartu_final_width_px += paspartu_width_px;
}
if ($j('.vertical_menu_enabled').length){
content_height = $window_height - paspartu_final_width_px - footer_height;
}
else {
if($j('header .header_bottom').length){ var headerColorString = $j('header .header_bottom').css('background-color'); }
if($j('header .bottom_header').length){ var headerColorString = $j('header .bottom_header').css('background-color'); }
var headerTransparency = headerColorString.substring(headerColorString.indexOf('(') + 1, headerColorString.lastIndexOf(')')).split(/,\s*/)[3];
var header_height = headerTransparency == undefined && !$j('header.page_header').hasClass('transparent') ? $j('header.page_header').height() : 0;
content_height = $window_height - header_height - paspartu_final_width_px - footer_height;
}
/*if($j('.content').length){
$j('.content').css('min-height',content_height);
}*/
}
}
/*
** Initialize Qode Slider
*/
var default_header_style;
function initQodeSlider(){
"use strict";
var image_regex = /url\(["']?([^'")]+)['"]?\)/;
default_header_style = "";
if($j('header.page_header').hasClass('light')){ default_header_style = 'light';}
if($j('header.page_header').hasClass('dark')){ default_header_style = 'dark';}
if($j('.carousel').length){
var matrixArray = { zoom_center : '1.2, 0, 0, 1.2, 0, 0', zoom_top_left: '1.2, 0, 0, 1.2, -150, -150', zoom_top_right : '1.2, 0, 0, 1.2, 150, -150', zoom_bottom_left: '1.2, 0, 0, 1.2, -150, 150', zoom_bottom_right: '1.2, 0, 0, 1.2, 150, 150'};
// Function for translating image in slide - START //
(function ($) {
//
// regular expression for parsing out the matrix
// components from the matrix string
//
var matrixRE = /\([0-9epx\.\, \t\-]+/gi;
//
// parses a matrix string of the form
// "matrix(n1,n2,n3,n4,n5,n6)" and
// returns an array with the matrix
// components
//
var parseMatrix = function (val) {
return val.match(matrixRE)[0].substr(1).
split(",").map(function (s) {
return parseFloat(s);
});
};
//
// transform css property names with vendor prefixes;
// the plugin will check for values in the order the
// names are listed here and return as soon as there
// is a value; so listing the W3 std name for the
// transform results in that being used if its available
//
var transformPropNames = [
"transform",
"-webkit-transform"
];
var getTransformMatrix = function (el) {
//
// iterate through the css3 identifiers till we
// hit one that yields a value
//
var matrix = null;
transformPropNames.some(function (prop) {
matrix = el.css(prop);
return (matrix !== null && matrix !== "");
});
//
// if "none" then we supplant it with an identity matrix so
// that our parsing code below doesn't break
//
matrix = (!matrix || matrix === "none") ?
"matrix(1,0,0,1,0,0)" : matrix;
return parseMatrix(matrix);
};
//
// set the given matrix transform on the element; note that we
// apply the css transforms in reverse order of how its given
// in "transformPropName" to ensure that the std compliant prop
// name shows up last
//
var setTransformMatrix = function (el, matrix) {
var m = "matrix(" + matrix.join(",") + ")";
for (var i = transformPropNames.length - 1; i >= 0; --i) {
el.css(transformPropNames[i], m + ' rotate(0.01deg)');
}
};
//
// interpolates a value between a range given a percent
//
var interpolate = function (from, to, percent) {
return from + ((to - from) * (percent / 100));
};
$.fn.transformAnimate = function (opt) {
//
// extend the options passed in by caller
//
var options = {
transform: "matrix(1,0,0,1,0,0)"
};
$.extend(options, opt);
//
// initialize our custom property on the element
// to track animation progress
//
this.css("percentAnim", 0);
//
// supplant "options.step" if it exists with our own
// routine
//
var sourceTransform = getTransformMatrix(this);
var targetTransform = parseMatrix(options.transform);
options.step = function (percentAnim, fx) {
//
// compute the interpolated transform matrix for
// the current animation progress
//
var $this = $(this);
var matrix = sourceTransform.map(function (c, i) {
return interpolate(c, targetTransform[i],
percentAnim);
});
//
// apply the new matrix
//
setTransformMatrix($this, matrix);
//
// invoke caller's version of "step" if one
// was supplied;
//
if (opt.step) {
opt.step.apply(this, [matrix, fx]);
}
};
//
// animate!
//
return this.stop().animate({ percentAnim: 100 }, options);
};
})(jQuery);
// Function for translating image in slide - END //
$j('.carousel').each(function(){
var $this = $j(this);
var mobile_header;
var mobile_header = $j(window).width() < 1000 ? $j('header.page_header').height() : 0;
var header_height_add_for_paspartu = $window_width > 1000 && !$j('header.page_header').hasClass('transparent') && $j('body.paspartu_on_top_fixed').length == 0 ? $j('header.page_header').height() : 0;
var paspartu_amount_with_top = $j('.paspartu_outer:not(.disable_top_paspartu)').length > 0 ? Math.round($window_width*paspartu_width + header_height_add_for_paspartu) : 0;
var paspartu_amount_with_bottom = $j('.paspartu_outer.paspartu_on_bottom_slider').length > 0 ? Math.round($window_width*paspartu_width) : 0;
var slider_graphic_coefficient;
var slider_title_coefficient;
var slider_subtitle_coefficient;
var slider_text_coefficient;
var slider_button_coefficient;
var responsive_breakpoint_set = [1300,1000,768];
if($this.hasClass('advanced_responsiveness')){
responsive_breakpoint_set = [1600,1200,900,650,500,320];
if($this.data('q_responsive_breakpoints')){
if($this.data('q_responsive_breakpoints') == 'set2'){
responsive_breakpoint_set = [1600,1300,1000,768,567,320];
}
}
var coefficients_graphic_array = $this.data('q_responsive_graphic_coefficients').split(',');
var coefficients_title_array = $this.data('q_responsive_title_coefficients').split(',');
var coefficients_subtitle_array = $this.data('q_responsive_subtitle_coefficients').split(',');
var coefficients_text_array = $this.data('q_responsive_text_coefficients').split(',');
var coefficients_button_array = $this.data('q_responsive_button_coefficients').split(',');
}
//calculate heights for slider holder and slide item, depending on size, but only if slider is set to be responsive and not full screen
function setSliderHeight($this, $def_height){
var slider_height = $def_height;
if($this.hasClass('advanced_responsiveness')){
//advanced responsiveness
if($window_width > responsive_breakpoint_set[0]){
slider_height = $def_height;
}else if($window_width > responsive_breakpoint_set[1]){
slider_height = $def_height * 0.75;
}else if($window_width > responsive_breakpoint_set[2]){
slider_height = $def_height * 0.6;
}else if($window_width > responsive_breakpoint_set[3]){
slider_height = $def_height * 0.55;
}else if($window_width <= responsive_breakpoint_set[3]){
slider_height = $def_height * 0.45;
}
}else{
//old way responsiveness
if($window_width > responsive_breakpoint_set[0]){
slider_height = $def_height;
}else if($window_width > responsive_breakpoint_set[1]){
slider_height = $def_height * 0.8;
}else if($window_width > responsive_breakpoint_set[2]){
slider_height = $def_height * 0.7;
}else if($window_width <= responsive_breakpoint_set[2]){
slider_height = $def_height * 1;
}
}
$this.css({'height': (slider_height) + 'px'});
$this.find('.qode_slider_preloader').css({'height': (slider_height) + 'px'});
$this.find('.qode_slider_preloader .ajax_loader').css({'display': 'block'});
$this.find('.item').css({'height': (slider_height) + 'px'});
}
function resetSliderHeight($def_height){
$this.css({'height': ($def_height) + 'px'});
$this.find('.qode_slider_preloader').css({'height': ($def_height) + 'px'});
$this.find('.qode_slider_preloader .ajax_loader').css({'display': 'block'});
$this.find('.item').css({'height': ($def_height) + 'px'});
}
function setSliderInitialElementsSize($item,i){
window["slider_graphic_width_" + i] = [];
window["slider_graphic_height_" + i] = [];
window["slider_svg_width_" + i] = [];
window["slider_svg_height_" + i] = [];
window["slider_title_" + i] = [];
window["slider_subtitle_" + i] = [];
window["slider_text_" + i] = [];
window["slider_button1_" + i] = [];
window["slider_button2_" + i] = [];
window["slider_separator_" + i] = [];
//graphic size
window["slider_graphic_width_" + i].push(parseFloat($item.find('.thumb img').data("width")));
window["slider_graphic_height_" + i].push(parseFloat($item.find('.thumb img').data("height")));
window["slider_svg_width_" + i].push(parseFloat($item.find('.qode_slide-svg-holder svg').attr("width")));
window["slider_svg_height_" + i].push(parseFloat($item.find('.qode_slide-svg-holder svg').attr("height")));
// font-size (0)
window["slider_title_" + i].push(parseFloat($item.find('.q_slide_title').css("font-size")));
window["slider_subtitle_" + i].push(parseFloat($item.find('.q_slide_subtitle').css("font-size")));
window["slider_text_" + i].push(parseFloat($item.find('.q_slide_text').css("font-size")));
window["slider_button1_" + i].push(parseFloat($item.find('.qbutton:eq(0)').css("font-size")));
window["slider_button2_" + i].push(parseFloat($item.find('.qbutton:eq(1)').css("font-size")));
// line-height (1)
window["slider_title_" + i].push(parseFloat($item.find('.q_slide_title').css("line-height")));
window["slider_subtitle_" + i].push(parseFloat($item.find('.q_slide_subtitle').css("line-height")));
window["slider_text_" + i].push(parseFloat($item.find('.q_slide_text').css("line-height")));
window["slider_button1_" + i].push(parseFloat($item.find('.qbutton:eq(0)').css("line-height")));
window["slider_button2_" + i].push(parseFloat($item.find('.qbutton:eq(1)').css("line-height")));
// letter-spacing (2)
window["slider_title_" + i].push(parseFloat($item.find('.q_slide_title').css("letter-spacing")));
window["slider_subtitle_" + i].push(parseFloat($item.find('.q_slide_subtitle').css("letter-spacing")));
window["slider_text_" + i].push(parseFloat($item.find('.q_slide_text').css("letter-spacing")));
window["slider_button1_" + i].push(parseFloat($item.find('.qbutton:eq(0)').css("letter-spacing")));
window["slider_button2_" + i].push(parseFloat($item.find('.qbutton:eq(1)').css("letter-spacing")));
// margin-bottom (3)
window["slider_title_" + i].push(parseFloat($item.find('.q_slide_title').css("margin-bottom")));
window["slider_subtitle_" + i].push(parseFloat($item.find('.q_slide_subtitle').css("margin-bottom")));
// slider_button height(3), width(4), padding(5)
window["slider_button1_" + i].push(parseFloat($item.find('.qbutton:eq(0)').css("height")));
window["slider_button2_" + i].push(parseFloat($item.find('.qbutton:eq(1)').css("height")));
if(parseFloat($item.find('.qbutton:eq(0)').css("width")) != 0){
window["slider_button1_" + i].push(parseFloat($item.find('.qbutton:eq(0)').css("width")));
}else{
window["slider_button1_" + i].push(0);
}
if(parseFloat($item.find('.qbutton:eq(1)').css("width")) != 0){
window["slider_button2_" + i].push(parseFloat($item.find('.qbutton:eq(1)').css("width")));
}else{
window["slider_button2_" + i].push(0);
}
window["slider_button1_" + i].push(parseFloat($item.find('.qbutton:eq(0)').css("padding-left")));
window["slider_button2_" + i].push(parseFloat($item.find('.qbutton:eq(1)').css("padding-left")));
// margin separator, margin top(0), margin bottom(1)
window["slider_separator_" + i].push(parseFloat($item.find('.separator').css("margin-top")));
window["slider_separator_" + i].push(parseFloat($item.find('.separator').css("margin-bottom")));
}
//calculate size for slider title, subtitle and text, depending on window size
function setSliderElementsSize($item,i){
if($window_width > responsive_breakpoint_set[0]) {
slider_graphic_coefficient = coefficients_graphic_array[0];
slider_title_coefficient = coefficients_title_array[0];
slider_subtitle_coefficient = coefficients_subtitle_array[0];
slider_text_coefficient = coefficients_text_array[0];
slider_button_coefficient = coefficients_button_array[0];
}else if($window_width > responsive_breakpoint_set[1]){
slider_graphic_coefficient = coefficients_graphic_array[1];
slider_title_coefficient = coefficients_title_array[1];
slider_subtitle_coefficient = coefficients_subtitle_array[1];
slider_text_coefficient = coefficients_text_array[1];
slider_button_coefficient = coefficients_button_array[1];
}else if($window_width > responsive_breakpoint_set[2]){
slider_graphic_coefficient = coefficients_graphic_array[2];
slider_title_coefficient = coefficients_title_array[2];
slider_subtitle_coefficient = coefficients_subtitle_array[2];
slider_text_coefficient = coefficients_text_array[2];
slider_button_coefficient = coefficients_button_array[2];
}else if($window_width > responsive_breakpoint_set[3]){
slider_graphic_coefficient = coefficients_graphic_array[3];
slider_title_coefficient = coefficients_title_array[3];
slider_subtitle_coefficient = coefficients_subtitle_array[3];
slider_text_coefficient = coefficients_text_array[3];
slider_button_coefficient = coefficients_button_array[3];
}else if ($window_width > responsive_breakpoint_set[4]) {
slider_graphic_coefficient = coefficients_graphic_array[4];
slider_title_coefficient = coefficients_title_array[4];
slider_subtitle_coefficient = coefficients_subtitle_array[4];
slider_text_coefficient = coefficients_text_array[4];
slider_button_coefficient = coefficients_button_array[4];
}else if ($window_width > responsive_breakpoint_set[5]){
slider_graphic_coefficient = coefficients_graphic_array[5];
slider_title_coefficient = coefficients_title_array[5];
slider_subtitle_coefficient = coefficients_subtitle_array[5];
slider_text_coefficient = coefficients_text_array[5];
slider_button_coefficient = coefficients_button_array[5];
}
else{
slider_graphic_coefficient = coefficients_graphic_array[6];
slider_title_coefficient = coefficients_title_array[6];
slider_subtitle_coefficient = coefficients_subtitle_array[6];
slider_text_coefficient = coefficients_text_array[6];
slider_button_coefficient = coefficients_button_array[6];
}
// letter-spacing decrease quicker
var slider_title_coefficient_letter_spacing = slider_title_coefficient;
var slider_subtitle_coefficient_letter_spacing = slider_subtitle_coefficient;
var slider_text_coefficient_letter_spacing = slider_text_coefficient;
if($window_width <= responsive_breakpoint_set[0]) {
slider_title_coefficient_letter_spacing = slider_title_coefficient/2;
slider_subtitle_coefficient_letter_spacing = slider_subtitle_coefficient/2;
slider_text_coefficient_letter_spacing = slider_text_coefficient/2;
}
$item.find('.thumb').css({"width": Math.round(window["slider_graphic_width_" + i][0]*slider_graphic_coefficient) + 'px'}).css({"height": Math.round(window["slider_graphic_height_" + i][0]*slider_graphic_coefficient) + 'px'});
$item.find('.qode_slide-svg-holder svg').css({"width": Math.round(window["slider_svg_width_" + i][0]*slider_graphic_coefficient) + 'px'}).css({"height": Math.round(window["slider_svg_height_" + i][0]*slider_graphic_coefficient) + 'px'});
$item.find('.q_slide_title').css({"font-size": Math.round(window["slider_title_" + i][0]*slider_title_coefficient) + 'px'});
$item.find('.q_slide_title').css({"line-height": Math.round(window["slider_title_" + i][1]*slider_title_coefficient) + 'px'});
$item.find('.q_slide_title').css({"letter-spacing": Math.round(window["slider_title_" + i][2]*slider_title_coefficient_letter_spacing) + 'px'});
$item.find('.q_slide_title').css({"margin-bottom": Math.round(window["slider_title_" + i][3]*slider_title_coefficient) + 'px'});
$item.find('.q_slide_subtitle').css({"font-size": Math.round(window["slider_subtitle_" + i][0]*slider_subtitle_coefficient) + 'px'});
$item.find('.q_slide_subtitle').css({"line-height": Math.round(window["slider_subtitle_" + i][1]*slider_subtitle_coefficient) + 'px'});
$item.find('.q_slide_subtitle').css({"letter-spacing": Math.round(window["slider_subtitle_" + i][2]*slider_subtitle_coefficient_letter_spacing) + 'px'});
$item.find('.q_slide_subtitle').css({"margin-bottom": Math.round(window["slider_subtitle_" + i][3]*slider_subtitle_coefficient) + 'px'});
$item.find('.q_slide_text').css({"font-size": Math.round(window["slider_text_" + i][0]*slider_text_coefficient) + 'px'});
$item.find('.q_slide_text').css({"line-height": Math.round(window["slider_text_" + i][1]*slider_text_coefficient) + 'px'});
$item.find('.q_slide_text').css({"letter-spacing": Math.round(window["slider_text_" + i][2]*slider_text_coefficient_letter_spacing) + 'px'});
$item.find('.qbutton:eq(0)').css({"font-size": Math.round(window["slider_button1_" + i][0]*slider_button_coefficient) + 'px'});
$item.find('.qbutton:eq(1)').css({"font-size": Math.round(window["slider_button2_" + i][0]*slider_button_coefficient) + 'px'});
$item.find('.qbutton:eq(0)').css({"line-height": Math.round(window["slider_button1_" + i][1]*slider_button_coefficient) + 'px'});
$item.find('.qbutton:eq(1)').css({"line-height": Math.round(window["slider_button2_" + i][1]*slider_button_coefficient) + 'px'});
$item.find('.qbutton:eq(0)').css({"letter-spacing": Math.round(window["slider_button1_" + i][2]*slider_button_coefficient) + 'px'});
$item.find('.qbutton:eq(1)').css({"letter-spacing": Math.round(window["slider_button2_" + i][2]*slider_button_coefficient) + 'px'});
$item.find('.qbutton:eq(0)').css({"height": Math.round(window["slider_button1_" + i][3]*slider_button_coefficient) + 'px'});
$item.find('.qbutton:eq(1)').css({"height": Math.round(window["slider_button2_" + i][3]*slider_button_coefficient) + 'px'});
if(window["slider_button1_" + i][4] != 0) {
$item.find('.qbutton:eq(0)').css({"width": Math.round(window["slider_button1_" + i][4]*slider_button_coefficient) + 'px'});
}else{
$item.find('.qbutton:eq(0)').css({"width": 'auto'});
}
if(window["slider_button2_" + i][4] != 0) {
$item.find('.qbutton:eq(1)').css({"width": Math.round(window["slider_button2_" + i][4]*slider_button_coefficient) + 'px'});
}else{
$item.find('.qbutton:eq(1)').css({"width": 'auto'});
}
$item.find('.qbutton:eq(0)').css({"padding-left": Math.round(window["slider_button1_" + i][5]*slider_button_coefficient) + 'px'});
$item.find('.qbutton:eq(1)').css({"padding-left": Math.round(window["slider_button2_" + i][5]*slider_button_coefficient) + 'px'});
$item.find('.qbutton:eq(0)').css({"padding-right": Math.round(window["slider_button1_" + i][5]*slider_button_coefficient) + 'px'});
$item.find('.qbutton:eq(1)').css({"padding-right": Math.round(window["slider_button2_" + i][5]*slider_button_coefficient) + 'px'});
$item.find('.separator').css({"margin-top": Math.round(window["slider_separator_" + i][0]*slider_title_coefficient) + 'px'});
$item.find('.separator').css({"margin-bottom": Math.round(window["slider_separator_" + i][1]*slider_title_coefficient) + 'px'});
}
function resetSliderElementsSize($item,i){
$item.find('.thumb').css({"width": Math.round(window["slider_graphic_width_" + i][0]) + 'px'}).css({"height": Math.round(window["slider_graphic_height_" + i][0]) + 'px'});
$item.find('.qode_slide-svg-holder svg').css({"width": Math.round(window["slider_svg_width_" + i][0]) + 'px'}).css({"height": Math.round(window["slider_svg_height_" + i][0]) + 'px'});
$item.find('.q_slide_title').css({"font-size": Math.round(window["slider_title_" + i][0]) + 'px'});
$item.find('.q_slide_title').css({"line-height": Math.round(window["slider_title_" + i][1]) + 'px'});
$item.find('.q_slide_title').css({"letter-spacing": Math.round(window["slider_title_" + i][2]) + 'px'});
$item.find('.q_slide_title').css({"margin-bottom": Math.round(window["slider_title_" + i][3]) + 'px'});
$item.find('.q_slide_subtitle').css({"font-size": Math.round(window["slider_subtitle_" + i][0]) + 'px'});
$item.find('.q_slide_subtitle').css({"line-height": Math.round(window["slider_subtitle_" + i][1]) + 'px'});
$item.find('.q_slide_subtitle').css({"letter-spacing": Math.round(window["slider_subtitle_" + i][2]) + 'px'});
$item.find('.q_slide_subtitle').css({"margin-bottom": Math.round(window["slider_subtitle_" + i][3]) + 'px'});
$item.find('.q_slide_text').css({"font-size": Math.round(window["slider_text_" + i][0]) + 'px'});
$item.find('.q_slide_text').css({"line-height": Math.round(window["slider_text_" + i][1]) + 'px'});
$item.find('.q_slide_text').css({"letter-spacing": Math.round(window["slider_text_" + i][2]) + 'px'});
$item.find('.qbutton:eq(0)').css({"font-size": Math.round(window["slider_button1_" + i][0]) + 'px'});
$item.find('.qbutton:eq(1)').css({"font-size": Math.round(window["slider_button2_" + i][0]) + 'px'});
$item.find('.qbutton:eq(0)').css({"line-height": Math.round(window["slider_button1_" + i][1]) + 'px'});
$item.find('.qbutton:eq(1)').css({"line-height": Math.round(window["slider_button2_" + i][1]) + 'px'});
$item.find('.qbutton:eq(0)').css({"letter-spacing": Math.round(window["slider_button1_" + i][2]) + 'px'});
$item.find('.qbutton:eq(1)').css({"letter-spacing": Math.round(window["slider_button2_" + i][2]) + 'px'});
$item.find('.qbutton:eq(0)').css({"height": Math.round(window["slider_button1_" + i][3]) + 'px'});
$item.find('.qbutton:eq(1)').css({"height": Math.round(window["slider_button2_" + i][3]) + 'px'});
if(window["slider_button1_" + i][4] != 0) {
$item.find('.qbutton:eq(0)').css({"width": Math.round(window["slider_button1_" + i][4]) + 'px'});
}else{
$item.find('.qbutton:eq(0)').css({"width": 'auto'});
}
if(window["slider_button2_" + i][4] != 0) {
$item.find('.qbutton:eq(1)').css({"width": Math.round(window["slider_button2_" + i][4]) + 'px'});
}else{
$item.find('.qbutton:eq(1)').css({"width": 'auto'});
}
$item.find('.qbutton:eq(0)').css({"padding-left": Math.round(window["slider_button1_" + i][5]) + 'px'});
$item.find('.qbutton:eq(1)').css({"padding-left": Math.round(window["slider_button2_" + i][5]) + 'px'});
$item.find('.qbutton:eq(0)').css({"padding-right": Math.round(window["slider_button1_" + i][5]) + 'px'});
$item.find('.qbutton:eq(1)').css({"padding-right": Math.round(window["slider_button2_" + i][5]) + 'px'});
$item.find('.separator').css({"margin-top": Math.round(window["slider_separator_" + i][0]) + 'px'});
$item.find('.separator').css({"margin-bottom": Math.round(window["slider_separator_" + i][1]) + 'px'});
}
if($this.hasClass('full_screen')){
$this.css({'height': ($j(window).height() - mobile_header - paspartu_amount_with_top - paspartu_amount_with_bottom) + 'px'});
$this.find('.qode_slider_preloader').css({'height': ($j(window).height() - mobile_header - paspartu_amount_with_top - paspartu_amount_with_bottom) + 'px'});
$this.find('.qode_slider_preloader .ajax_loader').css({'display': 'block'});
$this.find('.item').css({'height': ($j(window).height() - mobile_header - paspartu_amount_with_top - paspartu_amount_with_bottom) + 'px'});
if($j('.paspartu_outer:not(.disable_top_paspartu)').length){
if(!$j('body').hasClass('paspartu_on_top_fixed')){
$this.closest('.q_slider').css('padding-top', Math.round(header_height_add_for_paspartu + $window_width * paspartu_width));
}
}
if($j('.paspartu_outer.paspartu_on_bottom_slider').length){
$this.closest('.q_slider').css('padding-bottom', Math.round($window_width * paspartu_width));
}
$j(window).resize(function() {
mobile_header = $j(window).width() < 1000 ? $j('header.page_header').height() : 0;
header_height_add_for_paspartu = $window_width > 1000 && !$j('header.page_header').hasClass('transparent') && $j('body.paspartu_on_top_fixed').length == 0 ? $j('header.page_header').height() : 0;
paspartu_amount_with_top = $j('.paspartu_outer:not(.disable_top_paspartu)').length > 0 ? Math.round($window_width*paspartu_width + header_height_add_for_paspartu) : 0;
paspartu_amount_with_bottom = $j('.paspartu_outer.paspartu_on_bottom_slider').length > 0 ? Math.round($window_width*paspartu_width) : 0;
$this.css({'height': ($j(window).height() - mobile_header - paspartu_amount_with_top - paspartu_amount_with_bottom) + 'px'});
$this.find('.qode_slider_preloader .ajax_loader').css({'display': 'block'});
$this.find('.item').css({'height': ($j(window).height() - mobile_header - paspartu_amount_with_top - paspartu_amount_with_bottom) + 'px'});
if($j('.paspartu_outer:not(.disable_top_paspartu)').length){
if(!$j('body').hasClass('paspartu_on_top_fixed')){
$this.closest('.q_slider').css('padding-top', Math.round(header_height_add_for_paspartu + $window_width * paspartu_width));
}
}
if($j('.paspartu_outer.paspartu_on_bottom_slider').length){
$this.closest('.q_slider').css('padding-bottom', Math.round($window_width * paspartu_width));
}
if($this.hasClass('advanced_responsiveness')){
$this.find('.item').each(function(i){
setSliderElementsSize($j(this),i);
});
}
});
}else if($this.hasClass('responsive_height')){
var $def_height = $this.data('height');
$this.find('.qode_slider_preloader').css({'height': ($this.height() - mobile_header - paspartu_amount_with_top - paspartu_amount_with_bottom) + 'px', 'display': 'block'});
if($j('.paspartu_outer:not(.disable_top_paspartu)').length){
if(!$j('body').hasClass('paspartu_on_top_fixed')){
$this.closest('.q_slider').css('padding-top', Math.round(header_height_add_for_paspartu + $window_width * paspartu_width));
}
}
if($j('.paspartu_outer.paspartu_on_bottom_slider').length){
$this.closest('.q_slider').css('padding-bottom', Math.round($window_width * paspartu_width));
}
setSliderHeight($this, $def_height);
$j(window).resize(function() {
if($j('.paspartu_outer:not(.disable_top_paspartu)').length){
header_height_add_for_paspartu = $window_width > 1000 && !$j('header.page_header').hasClass('transparent') ? $j('header.page_header').height() : 0;
if(!$j('body').hasClass('paspartu_on_top_fixed')){
$this.closest('.q_slider').css('padding-top', Math.round(header_height_add_for_paspartu + $window_width * paspartu_width));
}
}
if($j('.paspartu_outer.paspartu_on_bottom_slider').length){
$this.closest('.q_slider').css('padding-bottom', Math.round($window_width * paspartu_width));
}
setSliderHeight($this, $def_height);
if($this.hasClass('advanced_responsiveness')){
$this.find('.item').each(function(i){
setSliderElementsSize($j(this),i);
});
}
});
}else {
$this.find('.qode_slider_preloader').css({'height': ($this.height() - mobile_header) + 'px', 'display': 'block'});
$this.find('.qode_slider_preloader .ajax_loader').css({'display': 'block'});
if($j('.paspartu_outer:not(.disable_top_paspartu)').length){
if(!$j('body').hasClass('paspartu_on_top_fixed')){
$this.closest('.q_slider').css('padding-top', Math.round(header_height_add_for_paspartu + $window_width * paspartu_width));
}
}
if($j('.paspartu_outer.paspartu_on_bottom_slider').length){
$this.closest('.q_slider').css('padding-bottom', Math.round($window_width * paspartu_width));
}
if($this.hasClass('advanced_responsiveness')){
$this.find('.item').each(function(i){
setSliderInitialElementsSize($j(this),i);
setSliderElementsSize($j(this),i);
});
}
$window_width < 1000 ? setSliderHeight($this, $def_height) : resetSliderHeight($def_height);
$j(window).resize(function() {
if($j('.paspartu_outer:not(.disable_top_paspartu)').length){
header_height_add_for_paspartu = $window_width > 1000 && !$j('header.page_header').hasClass('transparent') ? $j('header.page_header').height() : 0;
if(!$j('body').hasClass('paspartu_on_top_fixed')){
$this.closest('.q_slider').css('padding-top', Math.round(header_height_add_for_paspartu + $window_width * paspartu_width));
}
}
if($j('.paspartu_outer.paspartu_on_bottom_slider').length){
$this.closest('.q_slider').css('padding-bottom', Math.round($window_width * paspartu_width));
}
if($window_width < 1000){
setSliderHeight($this, $def_height);
if($this.hasClass('advanced_responsiveness')){
$this.find('.item').each(function(i){
setSliderElementsSize($j(this),i);
});
}
}else{
resetSliderHeight($def_height);
if($this.hasClass('advanced_responsiveness')){
$this.find('.item').each(function(i){
resetSliderElementsSize($j(this),i);
});
}
}
});
}
if($j('body:not(.boxed):not(.vertical_menu_transparency):not(.vertical_menu_hidden):not(.page-template-landing_page-php)').hasClass('vertical_menu_enabled') && $j(window).width() > 1000){
var paspartu_add = $j('body').hasClass('paspartu_enabled') ? 2*Math.round($window_width*paspartu_width) : 0; //2 times paspartu (left and right side)
$this.find('.carousel-inner').width($window_width - 260 - paspartu_add);
$j(window).resize(function() {
if($j(window).width() > 1000){
paspartu_add = $j('body').hasClass('paspartu_enabled') ? 2*Math.round($window_width*paspartu_width) : 0; //2 times paspartu (left and right side)
$this.find('.carousel-inner').width($window_width - 260 - paspartu_add);
} else {
$this.find('.carousel-inner').css('width','100%');
}
});
}
if($j('body:not(.boxed):not(.vertical_menu_transparency):not(.page-template-landing_page-php)').hasClass('vertical_menu_hidden') && $window_width > 1000){
var paspartu_add = $j('body').hasClass('paspartu_enabled') ? 2*Math.round($window_width*paspartu_width) : 0; //2 times paspartu (left and right side)
$this.find('.carousel-inner').width($window_width - 40 - paspartu_add);
$j(window).resize(function() {
if($j(window).width() > 1000){
paspartu_add = $j('body').hasClass('paspartu_enabled') ? 2*Math.round($window_width*paspartu_width) : 0; //2 times paspartu (left and right side)
$this.find('.carousel-inner').width($window_width - 40 - paspartu_add);
} else {
$this.find('.carousel-inner').css('width','100%');
}
});
}
$j(window).scroll(function() {
if($scroll > ($this.height()+$j('header.page_header').height()) && $j(window).width() > 1000){
$this.find('.carousel-inner, .carousel-indicators, button').hide();
}else{
$this.find('.carousel-inner, .carousel-indicators, button').show();
}
});
var $slide_animation = $this.data('slide_animation');
if($slide_animation === ""){
$slide_animation = 6000;
}
// function for setting prev/next numbers on arrows
var all_items_count = $j('div.item').length;
function setPrevNextNumbers(curr_item, all_items_count){
if(curr_item == 1){
$this.find('.left.carousel-control .prev').html(all_items_count);
$this.find('.right.carousel-control .next').html(curr_item + 1);
}else if(curr_item == all_items_count){
$this.find('.left.carousel-control .prev').html(curr_item - 1);
$this.find('.right.carousel-control .next').html(1);
}else{
$this.find('.left.carousel-control .prev').html(curr_item - 1);
$this.find('.right.carousel-control .next').html(curr_item + 1);
}
}
function initSlider(){
//set active class on first item
$this.find('.carousel-inner .item:first-child').addClass('active');
checkSliderForHeaderStyle($j('.carousel .active'), $this.hasClass('header_effect'));
if($this.hasClass('slider_thumbs')){
// initial state of prev/next numbers
setPrevNextNumbers(1, all_items_count);
//set prev and next thumb on load
if($this.find('.active').next('div').find('.image').length){
src = image_regex.exec($this.find('.active').next('div').find('.image').attr('style'));
next_image = new Image();
next_image.src = src[1];
}else{
next_image = $this.find('.active').next('div').find('> .video').clone();
next_image.find('.video-overlay').remove();
next_image.find('.video-wrap').width(170).height(95);
next_image.find('.mejs-container').width(170).height(95);
next_image.find('video').width(170).height(95);
}
$this.find('.right.carousel-control .img').html(next_image).find('img, div.video').addClass('old');
if($this.find('.carousel-inner .item:last-child .image').length){
src = image_regex.exec($this.find('.carousel-inner .item:last-child .image').attr('style'));
prev_image = new Image();
prev_image.src = src[1];
}else{
prev_image = $this.find('.carousel-inner .item:last-child > .video').clone();
prev_image.find('.video-overlay').remove();
prev_image.find('.video-wrap').width(170).height(95);
prev_image.find('.mejs-container').width(170).height(95);
prev_image.find('video').width(170).height(95);
}
$this.find('.left.carousel-control .img').html(prev_image).find('img, div.video').addClass('old');
}
if($this.hasClass('q_auto_start')){
$this.carousel({
interval: $slide_animation,
pause: false
});
} else {
$this.carousel({
interval: 0,
pause: false
});
}
if($this.find('.item video').length){
initVideoBackgroundSize();
}
if($this.hasClass('advanced_responsiveness') && ($this.hasClass('responsive_height') || $this.hasClass('full_screen'))){
$this.find('.item').each(function (i) {
setSliderInitialElementsSize($j(this), i);
setSliderElementsSize($j(this), i);
});
}
//initiate image animation
if($j('.carousel-inner .item:first-child').hasClass('animate_image') && $window_width > 1000){
$this.find('.carousel-inner .item.animate_image:first-child .image').transformAnimate({
transform: "matrix("+matrixArray[$j('.carousel-inner .item:first-child').data('animate_image')]+")",
duration: 30000
});
}
}
if($j('html').hasClass('touch')){
if($this.find('.item:first-child .mobile-video-image').length > 0){
src = image_regex.exec($this.find('.item:first-child .mobile-video-image').attr('style'));
if (src) {
var backImg = new Image();
backImg.src = src[1];
$j(backImg).load(function(){
$j('.qode_slider_preloader').fadeOut(500);
initSlider();
checkSVG($this);
});
}
}
else{
src = image_regex.exec($this.find('.item:first-child .image').attr('style'));
if (src) {
var backImg = new Image();
backImg.src = src[1];
$j(backImg).load(function(){
$j('.qode_slider_preloader').fadeOut(500);
initSlider();
checkSVG($this);
});
}
}
} else {
if($this.find('.item:first-child video').length > 0){
$this.find('.item:first-child video').get(0).addEventListener('loadeddata',function(){
$j('.qode_slider_preloader').fadeOut(500);
initSlider();
checkSVG($this);
});
}else{
src = image_regex.exec($this.find('.item:first-child .image').attr('style'));
if (src) {
var backImg = new Image();
backImg.src = src[1];
$j(backImg).load(function(){
$j('.qode_slider_preloader').fadeOut(500);
initSlider();
checkSVG($this);
});
}
}
}
$this.on('slide.bs.carousel', function () {
$this.addClass('in_progress');
$this.find('.active .slider_content_outer').fadeTo(800,0);
});
$this.on('slid.bs.carousel', function () {
$this.removeClass('in_progress');
$this.find('.active .slider_content_outer').fadeTo(0,1);
checkSVG($this);
// initiate image animation on active slide and reset all others
$j('div.item.animate_image .image').stop().css({'transform':'', '-webkit-transform':''});
if($j('div.item.active').hasClass('animate_image') && $window_width > 1000){
$j('div.item.animate_image.active .image').transformAnimate({
transform: "matrix("+matrixArray[$j('div.item.animate_image.active').data('animate_image')]+")",
duration: 30000
});
}
if($this.hasClass('slider_thumbs')){
var curr_item = $j('div.item').index($j('div.item.active')[0]) + 1;
setPrevNextNumbers(curr_item, all_items_count);
// prev thumb
if($this.find('.active').prev('div.item').length){
if($this.find('.active').prev('div').find('.image').length){
src = image_regex.exec($this.find('.active').prev('div').find('.image').attr('style'));
prev_image = new Image();
prev_image.src = src[1];
}else{
prev_image = $this.find('.active').prev('div').find('> .video').clone();
prev_image.find('.video-overlay').remove();
prev_image.find('.video-wrap').width(170).height(95);
prev_image.find('.mejs-container').width(170).height(95);
prev_image.find('video').width(170).height(95);
}
$this.find('.left.carousel-control .img .old').fadeOut(300,function(){
$j(this).remove();
});
$this.find('.left.carousel-control .img').append(prev_image).find('img, div.video').fadeIn(300).addClass('old');
}else{
if($this.find('.carousel-inner .item:last-child .image').length){
src = image_regex.exec($this.find('.carousel-inner .item:last-child .image').attr('style'));
prev_image = new Image();
prev_image.src = src[1];
}else{
prev_image = $this.find('.carousel-inner .item:last-child > .video').clone();
prev_image.find('.video-overlay').remove();
prev_image.find('.video-wrap').width(170).height(95);
prev_image.find('.mejs-container').width(170).height(95);
prev_image.find('video').width(170).height(95);
}
$this.find('.left.carousel-control .img .old').fadeOut(300,function(){
$j(this).remove();
});
$this.find('.left.carousel-control .img').append(prev_image).find('img, div.video').fadeIn(300).addClass('old');
}
// next thumb
if($this.find('.active').next('div.item').length){
if($this.find('.active').next('div').find('.image').length){
src = image_regex.exec($this.find('.active').next('div').find('.image').attr('style'));
next_image = new Image();
next_image.src = src[1];
}else{
next_image = $this.find('.active').next('div').find('> .video').clone();
next_image.find('.video-overlay').remove();
next_image.find('.video-wrap').width(170).height(95);
next_image.find('.mejs-container').width(170).height(95);
next_image.find('video').width(170).height(95);
}
$this.find('.right.carousel-control .img .old').fadeOut(300,function(){
$j(this).remove();
});
$this.find('.right.carousel-control .img').append(next_image).find('img, div.video').fadeIn(300).addClass('old');
}else{
if($this.find('.carousel-inner .item:first-child .image').length){
src = image_regex.exec($this.find('.carousel-inner .item:first-child .image').attr('style'));
next_image = new Image();
next_image.src = src[1];
}else{
next_image = $this.find('.carousel-inner .item:first-child > .video').clone();
next_image.find('.video-overlay').remove();
next_image.find('.video-wrap').width(170).height(95);
next_image.find('.mejs-container').width(170).height(95);
next_image.find('video').width(170).height(95);
}
$this.find('.right.carousel-control .img .old').fadeOut(300,function(){
$j(this).remove();
});
$this.find('.right.carousel-control .img').append(next_image).find('img, div.video').fadeIn(300).addClass('old');
}
}
});
$this.swipe( {
swipeLeft: function(event, direction, distance, duration, fingerCount){ $this.carousel('next'); },
swipeRight: function(event, direction, distance, duration, fingerCount){ $this.carousel('prev'); },
threshold:20
});
});
if ($j('.no-touch .carousel').length) {
skrollr_slider = skrollr.init({
edgeStrategy: 'set',
smoothScrolling: true,
forceHeight: false
});
skrollr_slider.refresh();
}
}
}
function checkSliderForHeaderStyle($this, header_effect){
"use strict";
var slide_header_style = "";
var navigation_color = $this.data('navigation-color');
if($this.hasClass('light')){ slide_header_style = 'light';}
if($this.hasClass('dark')){ slide_header_style = 'dark';}
if( slide_header_style !== ""){
if(header_effect){
$j('header.page_header').removeClass('dark light').addClass(slide_header_style);
$j('aside.vertical_menu_area').removeClass('dark light').addClass(slide_header_style);
}
$j('.carousel .carousel-control, .carousel .carousel-indicators').removeClass('dark light').addClass(slide_header_style);
}else{
if(header_effect){
$j('header.page_header').removeClass('dark light').addClass(default_header_style);
$j('aside.vertical_menu_area').removeClass('dark light').addClass(default_header_style);
}
$j('.carousel .carousel-control, .carousel .carousel-indicators').removeClass('dark light').addClass(default_header_style);
}
if(navigation_color !== undefined){
$j('.carousel-control .thumb_holder .thumb_top, .carousel-indicators li').css('background-color',navigation_color);
$j('.carousel-control .prev_nav, .carousel-control .next_nav').css('border-color',navigation_color);
$j('.carousel-control .prev_nav i, .carousel-control .next_nav i').css('color',navigation_color);
}else{
$j('.carousel-control .thumb_holder .thumb_top, .carousel-indicators li').css('background-color','');
$j('.carousel-control .prev_nav, .carousel-control .next_nav').css('border-color','');
$j('.carousel-control .prev_nav i, .carousel-control .next_nav i').css('color','');
}
}
/*
** Set heights for qode carousel, portfolio slider and blog slider
*/
function calculateHeights(){
if($j('.portfolio_slides').length){
$j('.portfolio_slides').each(function(){
$j(this).parents('.caroufredsel_wrapper').css({'height' : ($j(this).find('li.item').outerHeight()-3) + 'px'}); //3 is because of the white line bellow the slider
});
}
if($j('.qode_carousels .slides').length){
$j('.qode_carousels .slides').each(function(){
$j(this).parents('.caroufredsel_wrapper').css({'height' : ($j(this).find('li.item').outerHeight()) + 'px'});
});
}
if($j('.blog_slides').length){
$j('.blog_slides').each(function(){
$j(this).parents('.caroufredsel_wrapper').css({'height' : ($j(this).find('li.item').outerHeight()-3) + 'px'});
});
}
}
/*
** Init Qode Carousel
*/
function initQodeCarousel(){
"use strict";
if($j('.qode_carousels').length){
$j('.qode_carousels').each(function(){
var itemWidth = ($j(this).parents('.grid_section').length == 1) ? 170 : 315;
$j(this).find('.slides').carouFredSel({
circular: true,
responsive: true,
scroll : {
items : 1,
duration : 1000,
pauseOnHover : false
},
items: {
width: itemWidth,
visible: {
min: 1,
max: 6
}
},
auto: true,
mousewheel: false,
swipe: {
onMouse: true,
onTouch: true
}
}).animate({'opacity': 1},1000);
});
calculateHeights();
}
}
/*
** Init Portfolio Slider
*/
function initPortfolioSlider(){
"use strict";
if($j('.portfolio_slider').length){
$j('.portfolio_slider').each(function(){
var number_of_items;
var item_width_fw;
if(typeof $j(this).data('number_of_items') !== 'undefined') {
number_of_items = $j(this).data('number_of_items');
}
else {
number_of_items = 'auto';
}
switch(number_of_items){
case 4:
item_width_fw = 500;
break;
case 5:
item_width_fw = 350;
break;
default:
item_width_fw = 500;
break;
}
var maxItems = ($j(this).parents('.grid_section').length == 1) ? 3 : number_of_items;
var itemWidth = ($j(this).parents('.grid_section').length == 1) ? 353 : item_width_fw;
$j(this).find('.portfolio_slides').carouFredSel({
circular: true,
responsive: true,
scroll: 1,
prev : {
button : function() {
return $j(this).parent().siblings('.caroufredsel-direction-nav').find('#caroufredsel-prev');
}
},
next : {
button : function() {
return $j(this).parent().siblings('.caroufredsel-direction-nav').find('#caroufredsel-next');
}
},
items: {
width: itemWidth,
visible: {
min: 1,
max: maxItems
}
},
auto: false,
mousewheel: false,
swipe: {
onMouse: true,
onTouch: true
}
}).animate({'opacity': 1},1000);
});
calculateHeights();
$j('.portfolio_slider .flex-direction-nav a').click(function(e){
e.preventDefault();
e.stopImmediatePropagation();
e.stopPropagation();
});
}
}
/*
** Init Blog Slider
*/
function initBlogSlider(){
"use strict";
if($j('.blog_slider').length){
$j('.blog_slider').each(function(){
var blogs_shown;
var maxItems;
var itemWidth;
var autoPlay = false;
if(typeof $j(this).data('blogs_shown') !== 'undefined') {
blogs_shown = $j(this).data('blogs_shown');
}
else if($j(this).hasClass('simple_slider')){
blogs_shown = 1;
}
else{
blogs_shown = 'auto';
}
if ($j(this).hasClass('simple_slider')) {
maxItems = 1;
itemWidth = 300;
autoPlay = false;
}
else {
maxItems = ($j(this).parents('.grid_section').length == 1) ? 3 : blogs_shown;
var itemWidthTemp;
switch (blogs_shown) {
case 3:
itemWidthTemp = 667;
break;
case 4:
itemWidthTemp = 500;
break;
case 5:
itemWidthTemp = 400;
break;
case 6:
itemWidthTemp = 334;
break;
default:
itemWidthTemp = 500;
break;
}
itemWidth = ($j(this).parents('.grid_section').length == 1) ? 353 : itemWidthTemp;
}
$j(this).find('.blog_slides').carouFredSel({
circular: true,
responsive: true,
scroll: 1,
prev : {
button : function() {
return $j(this).parent().siblings('.caroufredsel-direction-nav').find('#caroufredsel-prev');
}
},
next : {
button : function() {
return $j(this).parent().siblings('.caroufredsel-direction-nav').find('#caroufredsel-next');
}
},
items: {
width: itemWidth,
visible: {
min: 1,
max: maxItems
}
},
auto: autoPlay,
mousewheel: false,
swipe: {
onMouse: true,
onTouch: true
}
}).animate({'opacity': 1},1000);
});
calculateHeights();
$j('.blog_slider .flex-direction-nav a').click(function(e){
e.preventDefault();
e.stopImmediatePropagation();
e.stopPropagation();
});
}
}
/*
** Opening side menu on "menu button" click
*/
var current_scroll;
function initSideMenu(){
"use strict";
if ($j('body').hasClass('side_area_uncovered_from_content')) {
$j('.side_menu_button_wrapper a.side_menu_button_link, a.close_side_menu').click(function(e){
e.preventDefault();
$j('.side_menu').css({'right':'0'});
if(!$j('.side_menu_button_wrapper a.side_menu_button_link').hasClass('opened')){
$j('.side_menu').css({'visibility':'visible'});
$j(this).addClass('opened');
$j('body').addClass('right_side_menu_opened');
current_scroll = $j(window).scrollTop();
$j(window).scroll(function() {
if(Math.abs($scroll - current_scroll) > 400){
$j('body').removeClass('right_side_menu_opened');
$j('.side_menu_button_wrapper a').removeClass('opened');
var hide_side_menu = setTimeout(function(){
$j('.side_menu').css({'visibility':'hidden'});
clearTimeout(hide_side_menu);
},400);
}
});
}else{
$j('.side_menu_button_wrapper a.side_menu_button_link').removeClass('opened');
$j('body').removeClass('right_side_menu_opened');
var hide_side_menu = setTimeout(function(){
$j('.side_menu').css({'visibility':'hidden'});
clearTimeout(hide_side_menu);
},400);
}
});
}
if ($j('body').hasClass('side_menu_slide_with_content')) {
$j('.side_menu_button_wrapper a.side_menu_button_link, a.close_side_menu').click(function(e){
e.preventDefault();
if(!$j('.side_menu_button_wrapper a.side_menu_button_link').hasClass('opened')){
$j(this).addClass('opened');
$j('body').addClass('side_menu_open');
current_scroll = $j(window).scrollTop();
$j(window).scroll(function() {
if(Math.abs($scroll - current_scroll) > 400){
$j('body').removeClass('side_menu_open');
$j('.side_menu_button_wrapper a').removeClass('opened');
}
});
}else{//hamburger icon has class open on its click
$j('body').removeClass('side_menu_open');
$j('.side_menu_button_wrapper a.side_menu_button_link').removeClass('opened');
$j('body').removeClass('side_menu_open');
}
e.stopPropagation();
$j('.wrapper').click(function() {
e.preventDefault();
$j('body').removeClass('side_menu_open');
$j('.side_menu_button_wrapper a.side_menu_button_link').removeClass('opened');
$j('body').removeClass('side_menu_open');
});
});
}
if ($j('body').hasClass('side_menu_slide_from_right')) {
$j('.wrapper').prepend('');
$j('.side_menu_button_wrapper a.side_menu_button_link, a.close_side_menu').click(function(e){
e.preventDefault();
if(!$j('.side_menu_button_wrapper a.side_menu_button_link').hasClass('opened')){
$j(this).addClass('opened');
$j('body').addClass('right_side_menu_opened');
$j(' .wrapper .cover').click(function() {
$j('.side_menu_button_wrapper a.side_menu_button_link').removeClass('opened');
$j('body').removeClass('right_side_menu_opened');
$j('.side_menu_button_wrapper a').removeClass('opened');
});
current_scroll = $j(window).scrollTop();
$j(window).scroll(function() {
if(Math.abs($scroll - current_scroll) > 400){
$j('body').removeClass('right_side_menu_opened');
$j('.side_menu_button_wrapper a').removeClass('opened');
}
});
}else{
$j('.side_menu_button_wrapper a.side_menu_button_link').removeClass('opened');
$j('body').removeClass('right_side_menu_opened');
}
});
}
}
function setDropDownMenuPosition(){
"use strict";
var menu_items = $j(".drop_down > ul > li.narrow");
menu_items.each( function(i) {
var browser_width = $j(window).width()-16; // 16 is width of scroll bar
var boxed_layout = 1150; // boxed layout width
var menu_item_position = $j(menu_items[i]).offset().left;
var sub_menu_width = $j(menu_items[i]).find('.second .inner ul').width();
var menu_item_from_left = 0;
if($j('body').hasClass('boxed')){
menu_item_from_left = boxed_layout - (menu_item_position - (browser_width - boxed_layout)/2) + 17; // 17 is right padding between menu elements
} else {
menu_item_from_left = browser_width - menu_item_position + 17; // 17 is right padding between menu elements
}
var sub_menu_from_left;
if($j(menu_items[i]).find('li.sub').length > 0){
sub_menu_from_left = menu_item_from_left - sub_menu_width;
}
if(menu_item_from_left < sub_menu_width || sub_menu_from_left < sub_menu_width){
$j(menu_items[i]).find('.second').addClass('right');
$j(menu_items[i]).find('.second .inner ul').addClass('right');
}
});
}
function initDropDownMenu(){
"use strict";
var menu_items = $j('.drop_down > ul > li');
menu_items.each( function(i) {
if ($j(menu_items[i]).find('.second').length > 0) {
if($j(menu_items[i]).hasClass('wide')){
var dropdown = $j(this).find('.inner > ul');
var dropdownPadding = parseInt(dropdown.css('padding-left').slice(0, -2)) + parseInt(dropdown.css('padding-right').slice(0, -2));
if(!$j(this).hasClass('left_position') && !$j(this).hasClass('right_position')){
$j(this).find('.second').css('left',0);
}
var tallest = 0;
$j(this).find('.second > .inner > ul > li').each(function() {
var thisHeight = $j(this).height();
if(thisHeight > tallest) {
tallest = thisHeight;
}
});
$j(this).find('.second > .inner > ul > li').height(tallest);
var row_number;
if($j(this).find('.second > .inner > ul > li').length > 4){
row_number = 4;
}else{
row_number = $j(this).find('.second > .inner > ul > li').length;
}
var width = row_number*($j(this).find('.second > .inner > ul > li').outerWidth());
$j(this).find('.second > .inner > ul').width(width);
if(!$j(this).hasClass('wide_background')){
if(!$j(this).hasClass('left_position') && !$j(this).hasClass('right_position')){
var left_position = ($j(window).width() - 2 * ($j(window).width()-$j(this).find('.second').offset().left))/2 + (width+dropdownPadding)/2;
$j(this).find('.second').css('left',-left_position);
}
} else{
if(!$j(this).hasClass('left_position') && !$j(this).hasClass('right_position')){
var left_position = $j(this).find('.second').offset().left;
$j(this).find('.second').css('left',-left_position);
$j(this).find('.second').css('width',$j(window).width());
}
}
}
if(!menu_dropdown_height_set){
$j(menu_items[i]).data('original_height', $j(menu_items[i]).find('.second').height() + 'px');
$j(menu_items[i]).find('.second').height(0);
}
if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)) {
$j(menu_items[i]).on("touchstart mouseenter",function(){
$j(menu_items[i]).find('.second').css({'height': $j(menu_items[i]).data('original_height'), 'overflow': 'visible', 'visibility': 'visible', 'opacity': '1'});
}).on("mouseleave", function(){
$j(menu_items[i]).find('.second').css({'height': '0px','overflow': 'hidden', 'visivility': 'hidden', 'opacity': '0'});
});
}else{
var config = {
interval: 0,
over: function(){
setTimeout(function() {
$j(menu_items[i]).find('.second').addClass('drop_down_start');
$j(menu_items[i]).find('.second').stop().css({'height': $j(menu_items[i]).data('original_height')});
}, 150);
},
timeout: 150,
out: function(){
$j(menu_items[i]).find('.second').stop().css({'height': '0px'});
$j(menu_items[i]).find('.second').removeClass('drop_down_start');
}
};
$j(menu_items[i]).hoverIntent(config);
}
}
});
$j('.drop_down ul li.wide ul li a, .drop_down ul li.narrow ul li a').on('click',function(){
var $this = $j(this);
if(!$this.next('ul').length && ($this.attr('href') !== "http://#") && ($this.attr('href') !== "#") && !$this.hasClass('no_link')) {
setTimeout(function() {
$this.mouseleave();
}, 500);
}
});
menu_dropdown_height_set = true;
}
/*
** Vertical menu toggle dropdown
*/
function initVerticalMenu(){
"use strict";
if ($j('.no-touch .vertical_menu_toggle').length) {
var menu_items = $j('.no-touch .vertical_menu_toggle > ul > li');
var menu_items_2 = $j('.no-touch .vertical_menu_toggle ul li ul li');
menu_items.each( function(i) {
if($j(menu_items[i]).hasClass('has_sub')){
var subitems_number = $j(menu_items[i]).find('.inner > ul > li').length;
$j(menu_items[i]).hoverIntent({
over: function() {
$j(menu_items[i]).addClass('open');
$j(menu_items[i]).find('.second').slideDown(subitems_number*40, 'easeInOutSine', function(){
$j('.vertical_menu_area.with_scroll').getNiceScroll().resize();
});
},
out: function() {
//if(!$j(menu_items[i]).hasClass('active')){
$j(menu_items[i]).removeClass('open');
$j(menu_items[i]).find('.second').slideUp(subitems_number*40, 'easeInOutSine');
//}
},
timeout: 1000
});
}
});
menu_items_2.each( function(i) {
if($j(menu_items_2[i]).hasClass('menu-item-has-children')){
var subitems_number = $j(menu_items_2[i]).find('ul > li').length;
$j(menu_items_2[i]).hoverIntent({
over: function() {
$j(menu_items_2[i]).addClass('open');
$j(menu_items_2[i]).find('ul').slideDown(subitems_number*40, 'easeInOutSine', function(){
$j('.vertical_menu_area.with_scroll').getNiceScroll().resize();
});
},
out: function() {
$j(menu_items_2[i]).removeClass('open');
$j(menu_items_2[i]).find('ul').slideUp(subitems_number*40, 'easeInOutSine');
},
timeout: 1000
});
}
});
}
else if ($j('.vertical_menu_on_click').length) {
var menu_items = $j('.vertical_menu_on_click > ul > li > a');
var menu_items_2 = $j('.vertical_menu_on_click ul li ul li a');
menu_items.each( function(i) {
if($j(menu_items[i]).parent().hasClass('has_sub')){
$j(menu_items[i]).on('tap click',function(e) {
e.preventDefault();
if(!$j(this).parent().hasClass('open')) {
$j('.vertical_menu_on_click > ul > li').removeClass('open');
$j('.vertical_menu_on_click > ul > li').find('.second').slideUp('fast');
$j(this).parent().addClass('open');
$j(this).parent().find('.second').slideDown('slow', function () {
$j('.vertical_menu_area.with_scroll').getNiceScroll().resize();
});
}else{
$j(this).parent().removeClass('open');
$j(this).parent().find('.second').slideUp('fast', function () {
$j('.vertical_menu_area.with_scroll').getNiceScroll().resize();
});
}
return false;
});
}
});
menu_items_2.each( function(i) {
if($j(menu_items_2[i]).parent().hasClass('menu-item-has-children')){
$j(menu_items_2[i]).on('tap click',function(e) {
e.preventDefault();
if(!$j(this).parent().hasClass('open')) {
$j('.vertical_menu_on_click ul li ul li').removeClass('open');
$j('.vertical_menu_on_click ul li ul li').find('ul').slideUp('fast');
$j(this).parent().addClass('open');
$j(this).parent().find('ul').slideDown('slow', function () {
$j('.vertical_menu_area.with_scroll').getNiceScroll().resize();
});
}else{
$j(this).parent().removeClass('open');
$j(this).parent().find('ul').slideUp('fast', function () {
$j('.vertical_menu_area.with_scroll').getNiceScroll().resize();
});
}
return false;
});
}
});
}
else if ($j('.no-touch .vertical_menu_float').length){
//show dropdown to content on menu item hover, link is available on menu item click
var menu_items = $j('.no-touch .vertical_menu_float > ul > li');
var menu_items_2 = $j('.no-touch .vertical_menu_float ul li ul li');
menu_items.each( function(i) {
if($j(menu_items[i]).hasClass('has_sub')){
$j(menu_items[i]).hoverIntent({
over: function() {
$j(menu_items[i]).addClass('open');
$j(menu_items[i]).find('.second').addClass('vertical_menu_start');
},
out: function() {
//if(!$j(menu_items[i]).hasClass('active')){
$j(menu_items[i]).removeClass('open');
$j(menu_items[i]).find('.second').removeClass('vertical_menu_start');
},
timeout: 300
});
}
});
menu_items_2.each( function(i) {
if($j(menu_items_2[i]).hasClass('menu-item-has-children')){
var subitems_number = $j(menu_items_2[i]).find('ul > li').length;
$j(menu_items_2[i]).hoverIntent({
over: function() {
$j(menu_items_2[i]).addClass('open');
$j(menu_items_2[i]).find('ul').addClass('vertical_submenu_start');
},
out: function() {
$j(menu_items_2[i]).removeClass('open');
$j(menu_items_2[i]).find('ul').removeClass('vertical_submenu_start');
},
timeout: 300
});
}
});
}
}
/*
** Show/Hide Vertical menu for mobile
*/
function initVerticalMobileMenu(){
"use strict";
if ($j('.vertical_menu_toggle').length) {
//register tap / click event for main menu item plus icon
$j('.touch .vertical_menu_toggle > ul > li.has_sub > a .plus').on('tap click', function(e){
//first prevent event propagation and it's default behavior
e.stopPropagation();
e.preventDefault();
//is dropdown for clicked item visible?
if($j(this).parent().next('div.second').is(":visible")){
//if it is remove 'open' class and slide it up
$j(this).parents('.touch .vertical_menu_toggle > ul > li.has_sub').removeClass('open');
$j(this).parent().next('div.second').slideUp(200);
} else {
//if it's not visible add 'open' class and slide it down
$j(this).parents('.touch .vertical_menu_toggle > ul > li.has_sub').addClass('open');
$j(this).parent().next('div.second').slideDown(200);
}
});
//register tap / click event for second level main menu item plus icon
$j('.touch .vertical_menu_toggle ul li ul li > a .plus').on('tap click', function(e){
//first prevent event propagation and it's default behavior
e.stopPropagation();
e.preventDefault();
//is dropdown for clicked item visible?
if($j(this).parent().next('ul').is(":visible")){
//if it is remove 'open' class and slide it up
$j(this).parents('.touch .vertical_menu_toggle ul li ul li').removeClass('open');
$j(this).parent().next('ul').slideUp(200);
} else {
//if it's not visible add 'open' class and slide it down
$j(this).parents('.touch .vertical_menu_toggle ul li ul li').addClass('open');
$j(this).parent().next('ul').slideDown(200);
}
});
}
else if ($j('.vertical_menu_float').length){
$j('.touch .vertical_menu_float > ul > li.has_sub > a .plus').on('tap click', function(e){
//first prevent event propagation and it's default behavior
e.stopPropagation();
e.preventDefault();
//is dropdown for clicked item visible?
if($j(this).parent().next('div.second').hasClass('vertical_menu_start')){
//if it is remove 'open' class and 'vertical_menu_start'
$j(this).parents('.touch .vertical_menu_float > ul > li.has_sub').removeClass('open');
$j(this).parents('.touch .vertical_menu_float > ul > li.has_sub').find('.second').removeClass('vertical_menu_start');
} else { //if it's not visible add 'open' class and 'vertical_menu_start'
$j(this).parents('.touch .vertical_menu_float > ul > li.has_sub').addClass('open');
$j(this).parents('.touch .vertical_menu_float > ul > li.has_sub').find('.second').addClass('vertical_menu_start');
}
});
//register tap / click event for second level main menu item plus icon
$j('.touch .vertical_menu_float ul li ul li > a .plus').on('tap click', function(e){
//first prevent event propagation and it's default behavior
e.stopPropagation();
e.preventDefault();
//is dropdown for clicked item visible?
if($j(this).parent().next('ul').hasClass('vertical_submenu_start')){
//if it is remove 'open' class and slide it up
$j(this).parents('.touch .vertical_menu_float ul li ul li').removeClass('open');
$j(this).parents('.touch .vertical_menu_float ul li ul li').find('ul').removeClass('vertical_submenu_start');
} else {
//if it's not visible add 'open' class and slide it down
$j(this).parents('.touch .vertical_menu_float ul li ul li').addClass('open');
$j(this).parents('.touch .vertical_menu_float ul li ul li').find('ul').addClass('vertical_submenu_start');
}
});
}
}
/*
** Set transparency for left menu area
*/
function checkVerticalMenuTransparency(){
if($scroll !== 0){
$j('body.vertical_menu_transparency').removeClass('vertical_menu_transparency_on');
}else{
$j('body.vertical_menu_transparency').addClass('vertical_menu_transparency_on');
}
}
/*
** Show/Hide hidden Vertical menu
*/
function showHideVerticalMenu(){
if($j('.vertical_menu_hidden').length) {
var vertical_menu = $j('aside.vertical_menu_area');
var vertical_menu_bottom_logo = $j('.vertical_menu_area_bottom_logo');
var hovered_flag = true;
$j('.vertical_menu_hidden_button').on('click',function (e) {
e.preventDefault();
if(hovered_flag) {
hovered_flag = false;
current_scroll = $j(window).scrollTop(); //current scroll is defined in front of "initSideMenu" function
vertical_menu.addClass('active');
vertical_menu_bottom_logo.addClass('active');
}else{
hovered_flag = true;
vertical_menu.removeClass('active');
vertical_menu_bottom_logo.removeClass('active');
}
});
$j(window).scroll(function() {
if(Math.abs($scroll - current_scroll) > 400){
hovered_flag = true;
vertical_menu.removeClass('active');
vertical_menu_bottom_logo.removeClass('active');
}
});
//take click outside vertical left/rifgt area and close it
(function() {
var Outclick, outclick,
_this = this;
Outclick = (function() {
Outclick.name = 'Outclick';
function Outclick() {
this.objects = [];
}
Outclick.prototype.check = function(element, event) {
return !element.is(event.target) && element.has(event.target).length === 0;
};
Outclick.prototype.trigger = function(e) {
var execute,
_this = this;
execute = false;
return $j.each(this.objects, function(index, el) {
if (_this.check(el.container, e)) {
if (el.related.length < 1) {
execute = true;
} else {
$j.each(el.related, function(index, relation) {
if (_this.check(relation, e)) {
return execute = true;
} else {
execute = false;
return false;
}
});
}
if (execute) {
return el.callback.call(el.container);
}
}
});
};
return Outclick;
})();
outclick = new Outclick;
$j.fn.outclick = function(options) {
var _this = this;
if (options == null) {
options = {};
}
options.related || (options.related = []);
options.callback || (options.callback = function() {
return _this.hide();
});
return outclick.objects.push({
container: this,
related: options.related,
callback: options.callback
});
};
$j(document).mouseup(function(e) {
return outclick.trigger(e);
});
}).call(this);
$j(vertical_menu).outclick({
callback: function() {
hovered_flag = true;
vertical_menu.removeClass('active');
vertical_menu_bottom_logo.removeClass('active');
}
});
}
}
/*
** Plugin for counter shortcode
*/
(function($) {
"use strict";
$.fn.countTo = function(options) {
// merge the default plugin settings with the custom options
options = $.extend({}, $.fn.countTo.defaults, options || {});
// how many times to update the value, and how much to increment the value on each update
var loops = Math.ceil(options.speed / options.refreshInterval),
increment = (options.to - options.from) / loops;
return $(this).each(function() {
var _this = this,
loopCount = 0,
value = options.from,
interval = setInterval(updateTimer, options.refreshInterval);
function updateTimer() {
value += increment;
loopCount++;
$(_this).html(value.toFixed(options.decimals));
if (typeof(options.onUpdate) === 'function') {
options.onUpdate.call(_this, value);
}
if (loopCount >= loops) {
clearInterval(interval);
value = options.to;
if (typeof(options.onComplete) === 'function') {
options.onComplete.call(_this, value);
}
}
}
});
};
$.fn.countTo.defaults = {
from: 0, // the number the element should start at
to: 100, // the number the element should end at
speed: 1000, // how long it should take to count between the target numbers
refreshInterval: 100, // how often the element should be updated
decimals: 0, // the number of decimal places to show
onUpdate: null, // callback method for every time the element is updated,
onComplete: null // callback method for when the element finishes updating
};
})(jQuery);
/*
** Counter from zero to defined number
*/
function initToCounter(){
"use strict";
if($j('.counter.zero').length){
$j('.counter.zero').each(function() {
if(!$j(this).hasClass('executed')){
$j(this).addClass('executed');
if($j(this).parents('.vertical_split_slider').length){
$j(this).parent().css('opacity', '1');
var $max = parseFloat($j(this).text());
$j(this).countTo({
from: 0,
to: $max,
speed: 1500,
refreshInterval: 100
});
}
else{
$j(this).appear(function() {
$j(this).parent().css('opacity', '1');
var $max = parseFloat($j(this).text());
$j(this).countTo({
from: 0,
to: $max,
speed: 1500,
refreshInterval: 100
});
},{accX: 0, accY: -200});
}
}
});
}
}
/*
** Counter with random effect
*/
function initCounter(){
"use strict";
if($j('.counter.random').length){
$j('.counter.random').each(function() {
if(!$j(this).hasClass('executed')){
$j(this).addClass('executed');
if($j(this).parents('.vertical_split_slider').length){
$j(this).parent().css('opacity', '1');
$j(this).absoluteCounter({
speed: 2000,
fadeInDelay: 1000
});
}
else{
$j(this).appear(function() {
$j(this).parent().css('opacity', '1');
$j(this).absoluteCounter({
speed: 2000,
fadeInDelay: 1000
});
},{accX: 0, accY: -200});
}
}
});
}
}
/*
** Countdown
*/
function initCountdown(){
"use strict";
if($j('.countdown').length){
$j('.countdown').each(function(){
var countdownId = $j(this).attr('id');
var $this = $j('#'+countdownId);
var year = 0;
var month = 0;
var day = 0;
var hour = 0;
var minute = 0;
var monthsLabel;
var monthLabel;
var daysLabel;
var dayLabel;
var hoursLabel;
var hourLabel;
var minutesLabel;
var minuteLabel;
var secondsLabel;
var secondLabel;
var tickf;
var timezone;
var digitfs;
var labelfs;
var color;
if(typeof $this.data('year') !== 'undefined' && $this.data('year') !== false) {
year = $this.data('year');
}
if(typeof $this.data('month') !== 'undefined' && $this.data('month') !== false) {
month = $this.data('month');
}
if(typeof $this.data('day') !== 'undefined' && $this.data('day') !== false) {
day = $this.data('day');
}
if(typeof $this.data('hour') !== 'undefined' && $this.data('hour') !== false) {
hour = $this.data('hour');
}
if(typeof $this.data('minute') !== 'undefined' && $this.data('minute') !== false) {
minute = $this.data('minute');
}
if(typeof $this.data('monthslabel') !== 'undefined' && $this.data('monthslabel') !== false) {
monthsLabel = $this.data('monthslabel');
}
if(typeof $this.data('monthlabel') !== 'undefined' && $this.data('monthlabel') !== false) {
monthLabel = $this.data('monthlabel');
}
if(typeof $this.data('dayslabel') !== 'undefined' && $this.data('dayslabel') !== false) {
daysLabel = $this.data('dayslabel');
}
if(typeof $this.data('daylabel') !== 'undefined' && $this.data('daylabel') !== false) {
dayLabel = $this.data('daylabel');
}
if(typeof $this.data('hourslabel') !== 'undefined' && $this.data('hourslabel') !== false) {
hoursLabel = $this.data('hourslabel');
}
if(typeof $this.data('hourlabel') !== 'undefined' && $this.data('hourlabel') !== false) {
hourLabel = $this.data('hourlabel');
}
if(typeof $this.data('minuteslabel') !== 'undefined' && $this.data('minuteslabel') !== false) {
minutesLabel = $this.data('minuteslabel');
}
if(typeof $this.data('minutelabel') !== 'undefined' && $this.data('minutelabel') !== false) {
minuteLabel = $this.data('minuteLabel');
}
if(typeof $this.data('secondslabel') !== 'undefined' && $this.data('secondslabel') !== false) {
secondsLabel = $this.data('secondslabel');
}
if(typeof $this.data('secondlabel') !== 'undefined' && $this.data('secondlabel') !== false) {
secondLabel = $this.data('secondlabel');
}
if(typeof $this.data('tickf') !== 'undefined' && $this.data('tickf') !== false) {
tickf = $this.data('tickf');
}
if(typeof $this.data('timezone') !== 'undefined' && $this.data('timezone') !== false) {
timezone = $this.data('timezone');
}
if(typeof $this.data('digitfs') !== 'undefined' && $this.data('digitfs') !== false) {
digitfs = $this.data('digitfs');
}
if(typeof $this.data('labelfs') !== 'undefined' && $this.data('labelfs') !== false) {
labelfs = $this.data('labelfs');
}
if(typeof $this.data('color') !== 'undefined' && $this.data('color') !== false) {
color = $this.data('color');
}
$this.countdown({
until: new Date( year, month - 1, day, hour, minute, 44),
labels: ['Years', monthsLabel, 'Weeks', daysLabel, hoursLabel, minutesLabel, secondsLabel],
labels1: ['Year', monthLabel, 'Week', dayLabel, hourLabel, minuteLabel, secondLabel],
format: 'ODHMS',
timezone: timezone,
padZeroes: true,
significant: 0,
onTick: function(){
if (digitfs !== 'undefined' && digitfs !== ''){
$this.find('.countdown-amount').css('font-size',digitfs + 'px').css('line-height',digitfs + 'px');
}
if (labelfs !== 'undefined' && labelfs !== ''){
$this.find('.countdown-period').css('font-size',labelfs + 'px');
}
if (color !== 'undefined' && color !== ''){
$this.find('.countdown_separator').css('background-color',color);
}
}
});
});
}
}
/*
** Horizontal progress bars shortcode
*/
function initProgressBars(){
"use strict";
if($j('.q_progress_bar').length){
$j('.q_progress_bar').each(function() {
if($j(this).parents('.vertical_split_slider').length){
initToCounterHorizontalProgressBar($j(this));
var percentage = $j(this).find('.progress_content').data('percentage');
$j(this).find('.progress_content').css('width', '0%');
$j(this).find('.progress_content').animate({'width': percentage+'%'}, 1500);
$j(this).find('.progress_number_wrapper').css('width', '0%');
$j(this).find('.progress_number_wrapper').animate({'width': percentage+'%'}, 1500);
}
else {
$j(this).appear(function() {
initToCounterHorizontalProgressBar($j(this));
var percentage = $j(this).find('.progress_content').data('percentage');
$j(this).find('.progress_content').css('width', '0%');
$j(this).find('.progress_content').animate({'width': percentage+'%'}, 1500);
$j(this).find('.progress_number_wrapper').css('width', '0%');
$j(this).find('.progress_number_wrapper').animate({'width': percentage+'%'}, 1500);
},{accX: 0, accY: -200});
}
});
}
}
/*
** Counter for horizontal progress bars percent from zero to defined percent
*/
function initToCounterHorizontalProgressBar($this){
"use strict";
var percentage = parseFloat($this.find('.progress_content').data('percentage'));
if($this.find('.progress_number span').length) {
$this.find('.progress_number span').each(function() {
$j(this).parents('.progress_number_wrapper').css('opacity', '1');
$j(this).countTo({
from: 0,
to: percentage,
speed: 1500,
refreshInterval: 50
});
});
}
}
/*
** Unordered list animation effect
*/
function initListAnimation(){
"use strict";
if($j('.animate_list').length > 0 && $j('.no_animation_on_touch').length === 0){
$j('.animate_list').each(function(){
$j(this).appear(function() {
$j(this).find("li").each(function (l) {
var k = $j(this);
setTimeout(function () {
k.animate({
opacity: 1,
top: 0
}, 1500);
}, 100*l);
});
},{accX: 0, accY: -200});
});
}
}
/*
** Pie Chart shortcode
*/
function initPieChart(){
"use strict";
if($j('.q_percentage').length){
$j('.q_percentage').each(function() {
var $barColor = piechartcolor;
if($j(this).data('active') !== ""){
$barColor = $j(this).data('active');
}
var $trackColor = '#eeeeee';
if($j(this).data('noactive') !== ""){
$trackColor = $j(this).data('noactive');
}
var $line_width = 10;
if($j(this).data('linewidth') !== ""){
$line_width = $j(this).data('linewidth');
}
var $size = 174;
$j(this).appear(function() {
initToCounterPieChart($j(this));
$j(this).parent().css('opacity', '1');
$j(this).easyPieChart({
barColor: $barColor,
trackColor: $trackColor,
scaleColor: false,
lineCap: 'butt',
lineWidth: $line_width,
animate: 1500,
size: $size
});
},{accX: 0, accY: -200});
});
}
}
/*
** Pie Chart shortcode
*/
function initPieChartWithIcon(){
"use strict";
if($j('.q_percentage_with_icon').length){
$j('.q_percentage_with_icon').each(function() {
var $barColor = piechartcolor;
if($j(this).data('active') !== ""){
$barColor = $j(this).data('active');
}
var $trackColor = '#eeeeee';
if($j(this).data('noactive') !== ""){
$trackColor = $j(this).data('noactive');
}
var $line_width = 10;
if($j(this).data('linewidth') !== ""){
$line_width = $j(this).data('linewidth');
}
var $size = 174;
$j(this).appear(function() {
$j(this).parent().css('opacity', '1');
$j(this).css('opacity', '1');
$j(this).easyPieChart({
barColor: $barColor,
trackColor: $trackColor,
scaleColor: false,
lineCap: 'butt',
lineWidth: $line_width,
animate: 1500,
size: $size
});
},{accX: 0, accY: -200});
});
}
}
/*
** Counter for pie chart number from zero to defined number
*/
function initToCounterPieChart($this){
"use strict";
$j($this).css('opacity', '1');
var $max = parseFloat($j($this).find('.tocounter').text());
$j($this).find('.tocounter').countTo({
from: 0,
to: $max,
speed: 1500,
refreshInterval: 50
});
}
/*
** Init Portfolio list and Portfolio Filter
*/
function initPortfolio(){
"use strict";
if($j('.projects_holder_outer:not(.masonry_with_space)').length){
$j('.projects_holder_outer').each(function(){
$j('.filter_holder').each(function(){
var filter_height = 0;
$j(this).find('li.filter').each(function(){
filter_height += $j(this).height();
});
$j(this).on('click',function(data){
var $drop = $j(this),
$bro = $drop.siblings('.hidden');
if(!$drop.hasClass('expanded')){
$drop.find('ul').css('z-index','1000');
$drop.find('ul').height(filter_height+39); //36 is height of first default item + 1 border * 2 + 1 border on li
$drop.addClass('expanded');
var label = $drop.find('.label span');
label.text(label.attr('data-label'));
} else {
$drop.find('ul').height(36);
$drop.removeClass('expanded');
var $selected = $j(data.target),
ndx = $selected.index();
if($bro.length){
$bro.find('option').removeAttr('selected').eq(ndx).attr('selected','selected').change();
}
}
});
});
$j('.filter_holder .filter').on('click',function(){
var $this = $j(this).text();
var dropLabels = $j('.filter_holder').find('.label span');
dropLabels.each(function(){
$j(this).text($this);
});
});
var currentPortfolio = $j(this).find('.projects_holder');
if(currentPortfolio.hasClass('v1')){
var timeArray= new Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25);
}else if(currentPortfolio.hasClass('v2')){
var timeArray= new Array(1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20);
}else if(currentPortfolio.hasClass('v3')){
var timeArray= new Array(1,2,3,2,3,4,3,4,5,4,5,6,5,6,7,6,7,8,7,8,9,8,9,10,9,10,11,10,11,12,11,12,13,12,13,14,13,14,15,14,15,16,15,16,17,16,17,18,17,18,19,18,19,20,19,20,21,20,21,22);
}else if(currentPortfolio.hasClass('v4')){
var timeArray= new Array(1,2,3,4,2,3,4,5,3,4,5,6,4,5,6,7,5,6,7,8,6,7,8,9,7,8,9,10,8,9,10,11,9,10,11,12,10,11,12,13,11,12,13,14,12,13,14,15,13,14,15,16,14,15,16,17,15,16,17,18,16,17,18,19,17,18,19,20,18,19,20,21);
}else if(currentPortfolio.hasClass('v5')){
var timeArray= new Array(1,2,3,4,5,2,3,4,5,6,3,4,5,6,7,4,5,6,7,8,5,6,7,8,9,6,7,8,9,10,7,8,9,10,11,8,9,10,11,12,9,10,11,12,13,10,11,12,13,14,11,12,13,14,15,12,13,14,15,16,13,14,15,16,17,14,15,16,17,18,15,16,17,18,19,20,16,17,18,19,20,17,18,19,20,21,18,19,20,21,22,19,20,21,22,23);
}else if(currentPortfolio.hasClass('v6')){
var timeArray= new Array(1,2,3,4,5,6,2,3,4,5,6,7,3,4,5,6,7,8,4,5,6,7,8,9,5,6,7,8,9,10,6,7,8,9,10,11,7,8,9,10,11,12,8,9,10,11,12,13,9,10,11,12,13,14,10,11,12,13,14,15,11,12,13,14,15,16,12,13,14,15,16,17,13,14,15,16,17,18,14,15,16,17,18,19,15,16,17,18,19,20,16,17,18,19,20,21,17,18,19,20,21,22);
}
currentPortfolio.mixitup({
showOnLoad: 'all',
transitionSpeed: 600,
minHeight: 150,
onMixLoad: function(){
$j('.projects_holder').addClass('hideItems');
$j('.projects_holder article').css('visibility','visible');
if(currentPortfolio.hasClass('portfolio_one_by_one')) {
currentPortfolio.find('article').each(function(l) {
var currentPortfolioItem = $j(this);
if($j('.vertical_split_slider').length){
var acc = 0;
}else{
var acc = -150;
}
setTimeout(function() {
currentPortfolioItem.addClass('show');
}, 100*l);
});
}
if(currentPortfolio.hasClass('slide_from_left')) {
currentPortfolio.find('article').each(function(i) {
var currentPortfolioItem = $j(this);
setTimeout(function() {
currentPortfolioItem.addClass('show');
}, (Math.random() * 200));
});
}
if(currentPortfolio.hasClass('slide_from_top')) {
currentPortfolio.find('article').each(function(i) {
var currentPortfolioItem = $j(this);
setTimeout(function() {
currentPortfolioItem.addClass('show');
}, timeArray[i]*50);
});
}
if(currentPortfolio.hasClass('diagonal_fade')) {
currentPortfolio.find('article').each(function(i) {
var currentPortfolioItem = $j(this);
setTimeout(function() {
currentPortfolioItem.addClass('show');
}, timeArray[i]*50);
});
}
initParallax();
},
onMixEnd: function(){
initParallax();
}
});
});
}
}
/*
** Init z-index for portfolio items
*/
function initPortfolioZIndex(){
"use strict";
if($j('.projects_holder_outer.portfolio_no_space').length){
$j('.no_space.hover_text article').each(function(i){
$j(this).css('z-index', i +10);
});
}
}
function initPortfolioMasonry(){
"use strict";
if($j('.projects_masonry_holder, .masonry_with_space').length){
$j('.projects_masonry_holder, .masonry_with_space .projects_holder').each(function(){
var $window = jQuery(window);
var $this = $j(this);
$this.waitForImages(function(){
$this.animate({opacity:1});
if($j('.projects_masonry_holder').length){
resizeMasonry($this);
}
$this.isotope({
resizable: false,
itemSelector: '.portfolio_masonry_item, .mix',
layoutMode: 'masonry'
}).isotope( 'layout' );
if($j('.projects_masonry_holder').length){
setPortfolioMasZIndex();
$window.resize(function() {resizeMasonry($this); setPortfolioMasZIndex();});
}
if($this.hasClass('portfolio_one_by_one')) {
$this.find('article').each(function(l) {
var $this = $j(this);
setTimeout(function() {
$this.addClass('show');
}, 100*l);
});
}
if($this.hasClass('portfolio_fade_from_bottom')) {
$this.find('article').each(function(l) {
$j(this).appear(function() {
$j(this).addClass('show');
},{accX: 0, accY: -150});
});
}
});
});
}
}
var portfolio_width;
function resizeMasonry(container){
var $window = jQuery(window);
if($j('.full_width').length){
if($j('body').hasClass('vertical_menu_enabled') && $window_width > 1000){
portfolio_width = $window.innerWidth() - $j('.vertical_menu_area').innerWidth();
}else {
portfolio_width = $window.innerWidth();
}
}else{
var closest_container = container.closest('.container_inner');
if(closest_container.has('.column_inner').length) {
portfolio_width = container.closest('.column_inner').innerWidth();
} else {
portfolio_width = closest_container.innerWidth();
}
}
container.width(portfolio_width);
if(container.hasClass('gs4')){
var $cols = 4;
if(portfolio_width <= 1000 && portfolio_width > 480){
$cols = 2;
}else if(portfolio_width <= 480){
$cols = 1;
}
} else{
var $cols = 5;
if(portfolio_width > 1600){
$cols = 5;
}else if(portfolio_width <= 1600 && portfolio_width > 1200){
$cols = 4;
}else if(portfolio_width <= 1200 && portfolio_width > 1000){
$cols = 3;
}else if(portfolio_width <= 1000 && portfolio_width > 480){
$cols = 2;
}else if(portfolio_width <= 480){
$cols = 1;
}
}
var largeItemHeight;
if(container.find('article[class*="default"]:first img').height()){
largeItemHeight = container.find('article[class*="default"]:first img').height();
}else if(container.find('article[class*="large_width"]:not(.large_width_height):first img').height()){
largeItemHeight = container.find('article[class*="large_width"]:not(.large_width_height):first img').height();
}else{
largeItemHeight = (container.find('article[class*="large_width_height"]:first img').height()) ? (container.find('article[class*="large_width_height"]:first img').height())/2 : (container.find('article[class*="large_height"]:first img').height())/2;
}
var double = ($window.innerWidth() > 480) ? 2 : 1 ;
container.find('article[class*="large_width_height"] img, article[class*="large_height"] img').css('height',(largeItemHeight*double));
container.isotope({
masonry: { columnWidth: portfolio_width / parseInt($cols)}
});
}
function setPortfolioMasZIndex(){
var $elemXPos = {};
var $elemZIndex = {};
$j('.projects_masonry_holder article').each(function(){
$elemXPos[$j(this).index()] = getPortfolioXPos($j(this).css('left'));
});
var $elemXPosArray = $j.map($elemXPos, function (value) { return value; });
$elemXPosArray = cleanPortfolioMasXArray($elemXPosArray);
$elemXPosArray.sort(function(x,y){return x-y});
for(var i = 0; i < $elemXPosArray.length; i++){
$elemZIndex[$elemXPosArray[i]] = i*10;
}
$j.each($elemXPos,function(key,val){
var $zi;
var $bgd = val;
$j.each($elemZIndex,function(key,val){
if($bgd == key) {
$zi = val;
}
});
$j('.projects_masonry_holder article:eq('+key+')').css('z-index',$zi);
});
}
function cleanPortfolioMasXArray($elemXPosArray) {
var i;
var length = $elemXPosArray.length;
var $elemXPosOutArray = [];
var tmp = {};
for (i = 0; i < length; i++) {
tmp[$elemXPosArray[i]] = 0;
}
for (i in tmp) {
$elemXPosOutArray.push(i);
}
return $elemXPosOutArray;
}
function getPortfolioXPos(css) {
//return css.substr(7, css.length - 8).split(', ')[4];
return css.substr(0, css.length - 2);
}
function initPortfolioMasonryFilter(){
"use strict";
var portfolioIsotopeAnimation = null;
$j('.filter:first').addClass('current');
$j('.filter').click(function(){
clearTimeout(portfolioIsotopeAnimation);
$j('.isotope, .isotope .isotope-item').css('transition-duration','0.8s');
portfolioIsotopeAnimation = setTimeout(function(){ $j('.isotope, .isotope .isotope-item').css('transition-duration','0s'); },700);
var selector = $j(this).attr('data-filter');
$j('.projects_masonry_holder, .masonry_with_space .projects_holder').isotope({ filter: selector });
$j(".filter").removeClass("current");
$j(this).addClass("current");
setTimeout(setPortfolioMasZIndex(),700);
return false;
});
}
function initServiceAnimation(){
"use strict";
if($j(".fade_in_circle_holder").length > 0 && $j('.no_animation_on_touch').length === 0){
$j('.fade_in_circle_holder').each(function(){
$j(this).appear(function(){
$j(this).addClass('animate_circle');
},{accX: 0, accY: -200});
});
}
}
function checkTitleToShowOrHide(){
if($j('.title_outer.animate_title_area').length){
var title_area_height = $j('.title_outer').data('height');
if($scroll > $j('.title').height()){
$j('.title_outer').css({'height':title_area_height, 'opacity':'1', 'overflow':'visible'});
}
}
}
/*
** Title area animation
*/
function initTitleAreaAnimation(){
if($j('.title_outer.animate_title_area').length){
var title_area_height = $j('.title_outer').data('height');
if($j('.title_outer').hasClass('with_image')){
title_area_height = $j('.image.responsive').height();
}
if($scroll < $j('.title').height()){
$j('.title_outer').animate({ height: title_area_height, opacity: 1}, 500, function(){
$j(this).css({'overflow':'visible'});
initPortfolioSingleInfo();
if($j('nav.content_menu').length > 0){
content_menu_position = $j('nav.content_menu').offset().top;
contentMenuPosition();
}
});
}
}
}
/*
** Title image with parallax effect
*/
function initParallaxTitle(){
"use strict";
if(($j('.title').length > 0) && ($j('.touch').length === 0)){
if($j('.title.has_fixed_background').length){
var $background_size_width = parseInt($j('.title.has_fixed_background').css('background-size').match(/\d+/));
var title_holder_height = $j('.title.has_fixed_background').height();
var title_rate = (title_holder_height / 10000) * 7;
var title_distance = $scroll - $j('.title.has_fixed_background').offset().top;
var title_bpos = -(title_distance * title_rate);
$j('.title.has_fixed_background').css({'background-position': 'center '+ (0+add_for_admin_bar) +'px' });
if($j('.title.has_fixed_background').hasClass('zoom_out')){
$j('.title.has_fixed_background').css({'background-size': $background_size_width-$scroll + 'px auto'});
}
}
$j(window).on('scroll', function() {
if($j('.title.has_fixed_background').length){
var title_distance = $scroll - $j('.title.has_fixed_background').offset().top;
var title_bpos = -(title_distance * title_rate);
$j('.title.has_fixed_background').css({'background-position': 'center ' + (title_bpos+add_for_admin_bar) + 'px' });
if($j('.title.has_fixed_background').hasClass('zoom_out')){
$j('.title.has_fixed_background').css({'background-size': $background_size_width-$scroll + 'px auto'});
}
}
});
}
}
/*
Plugin: jQuery Parallax
Version 1.1.3
Author: Ian Lunn
Twitter: @IanLunn
Author URL: http://www.ianlunn.co.uk/
Plugin URL: http://www.ianlunn.co.uk/plugins/jquery-parallax/
Dual licensed under the MIT and GPL licenses:
http://www.opensource.org/licenses/mit-license.php
http://www.gnu.org/licenses/gpl.html
*/
(function( $ ){
var $window = $(window);
var windowHeight = $window.height();
$window.resize(function () {
windowHeight = $window.height();
});
$.fn.parallax = function(xpos, speedFactor, outerHeight) {
var $this = $(this);
var getHeight;
var firstTop;
var paddingTop = 0;
//get the starting position of each element to have parallax applied to it
$this.each(function(){
firstTop = $this.offset().top;
});
if (outerHeight) {
getHeight = function(jqo) {
return jqo.outerHeight(true);
};
} else {
getHeight = function(jqo) {
return jqo.height();
};
}
// setup defaults if arguments aren't specified
if (arguments.length < 1 || xpos === null) xpos = "50%";
if (arguments.length < 2 || speedFactor === null) speedFactor = 0.1;
if (arguments.length < 3 || outerHeight === null) outerHeight = true;
// function to be called whenever the window is scrolled or resized
function update(){
var pos = $window.scrollTop();
$this.each(function(){
var $element = $(this);
var top = $element.offset().top;
var height = getHeight($element);
// Check if totally above or totally below viewport
if (top + height < pos || top > pos + windowHeight) {
return;
}
$this.css('backgroundPosition', xpos + " " + Math.round((firstTop - pos) * speedFactor) + "px");
});
}
$window.bind('scroll', update).resize(update);
update();
};
})(jQuery);
/*
** Sections with parallax background image
*/
function initParallax(){
"use strict";
if($j('.parallax_section_holder').length){
$j('.parallax_section_holder').each(function() {
var speed = $j(this).data('speed')*0.4;
$j(this).parallax("50%", speed);
});
}
}
/*
** Smooth scroll functionality for Side Area
*/
function initSideAreaScroll(){
"use strict";
if($j('.side_menu').length){
$j(".side_menu").niceScroll({
scrollspeed: 60,
mousescrollstep: 40,
cursorwidth: 0,
cursorborder: 0,
cursorborderradius: 0,
cursorcolor: "transparent",
autohidemode: false,
horizrailenabled: false
});
}
}
/*
** Smooth scroll functionality for Vertical Menu Area Toogle style
*/
function initVerticalAreaMenuScroll(){
"use strict";
if($j('.vertical_menu_area.with_scroll').length){
$j(".vertical_menu_area.with_scroll").niceScroll({
scrollspeed: 60,
mousescrollstep: 40,
cursorwidth: 0,
cursorborder: 0,
cursorborderradius: 0,
cursorcolor: "transparent",
autohidemode: false,
horizrailenabled: false
});
}
}
/*
** Load more portfolios
*/
function loadMore(){
"use strict";
var i = 1;
$j('.load_more a').on('click', function(e) {
e.preventDefault();
var link = $j(this).attr('href');
var $content = '.projects_holder';
var $anchor = '.portfolio_paging .load_more a';
var $next_href = $j($anchor).attr('href'); // Get URL for the next set of posts
var filler_num = $j('.projects_holder .filler').length;
var load_more_holder = $j('.portfolio_paging');
var loading_holder = $j('.portfolio_paging_loading');
load_more_holder.hide();
loading_holder.show();
$j.get(link+'', function(data){
$j('.projects_holder .filler').slice(-filler_num).remove();
var $new_content = $j($content, data).wrapInner('').html(); // Grab just the content
$next_href = $j($anchor, data).attr('href'); // Get the new href
$j($content, data).waitForImages(function() {
$j('article.mix:last').after($new_content); // Append the new content
$j('.projects_holder article').css('visibility','visible');
$j('article:not(.show)').each(function(l){
$j(this).addClass('show');
});
if($j('.masonry_with_space').length){
$j('.masonry_with_space .projects_holder').isotope('reloadItems').isotope();
}else{
var min_height = $j('article.mix:first').height();
$j('article.mix').css('min-height',min_height);
$j('.projects_holder').mixitup('remix','all');
}
prettyPhoto();
if($j('.load_more').attr('rel') > i) {
$j('.load_more a').attr('href', $next_href); // Change the next URL
} else {
$j('.load_more').remove();
}
$j('.projects_holder .portfolio_paging:last').remove(); // Remove the original navigation
$j('article.mix').css('min-height',0);
load_more_holder.show();
loading_holder.hide();
});
});
i++;
});
}
/*
** Picture popup for portfolio lists and portfolio single
*/
function prettyPhoto(){
"use strict";
$j('a[data-rel]').each(function() {
$j(this).attr('rel', $j(this).data('rel'));
});
$j("a[rel^='prettyPhoto']").prettyPhoto({
animation_speed: 'normal', /* fast/slow/normal */
slideshow: false, /* false OR interval time in ms */
autoplay_slideshow: false, /* true/false */
opacity: 0.80, /* Value between 0 and 1 */
show_title: true, /* true/false */
allow_resize: true, /* Resize the photos bigger than viewport. true/false */
horizontal_padding: 0,
default_width: 650,
default_height: 400,
counter_separator_label: '/', /* The separator for the gallery counter 1 "of" 2 */
theme: 'pp_default', /* light_rounded / dark_rounded / light_square / dark_square / facebook */
hideflash: false, /* Hides all the flash object on a page, set to TRUE if flash appears over prettyPhoto */
wmode: 'opaque', /* Set the flash wmode attribute */
autoplay: true, /* Automatically start videos: True/False */
modal: false, /* If set to true, only the close button will close the window */
overlay_gallery: false, /* If set to true, a gallery will overlay the fullscreen image on mouse over */
keyboard_shortcuts: true, /* Set to false if you open forms inside prettyPhoto */
deeplinking: false,
social_tools: false
});
}
/*
** Show/Hide Mobile menu
*/
function initMobileMenu(){
"use strict";
$j(".mobile_menu_button > span").on('tap click', function(e){
e.preventDefault();
if ($j(".mobile_menu > ul").is(":visible")){
$j(".mobile_menu > ul").slideUp(200);
} else {
$j(".mobile_menu > ul").slideDown(200);
}
});
$j(".mobile_menu > ul > li.has_sub > span.mobile_arrow, .mobile_menu > ul > li.has_sub > h3, .mobile_menu > ul > li.has_sub > a[href*=#]").on('tap click', function(e){
e.preventDefault();
if ($j(this).closest('li.has_sub').find("> ul.sub_menu").is(":visible")){
$j(this).closest('li.has_sub').find("> ul.sub_menu").slideUp(200);
$j(this).closest('li.has_sub').removeClass('open_sub');
} else {
$j(this).closest('li.has_sub').addClass('open_sub');
$j(this).closest('li.has_sub').find("> ul.sub_menu").slideDown(200);
}
});
$j(".mobile_menu > ul > li.has_sub > ul.sub_menu > li.has_sub > span.mobile_arrow, .mobile_menu > ul > li.has_sub > ul.sub_menu > li.has_sub > h3, .mobile_menu > ul > li.has_sub > ul.sub_menu > li.has_sub > a[href*=#]").on('tap click', function(e){
e.preventDefault();
if ($j(this).parent().find("ul.sub_menu").is(":visible")){
$j(this).parent().find("ul.sub_menu").slideUp(200);
$j(this).parent().removeClass('open_sub');
} else {
$j(this).parent().addClass('open_sub');
$j(this).parent().find("ul.sub_menu").slideDown(200);
}
});
$j(".mobile_menu ul li > a, .q_logo a").on('click', function(){
if(($j(this).attr('href') !== "http://#") && ($j(this).attr('href') !== "#")){
$j(".mobile_menu > ul").slideUp();
}
});
}
/*
** Init flexslider for portfolio single
*/
function initFlexSlider(){
"use strict";
$j('.flexslider').each(function(){
var interval = 8000;
if(typeof $j(this).data('interval') !== 'undefined' && $j(this).data('interval') !== false) {
interval = parseFloat($j(this).data('interval')) * 1000;
}
var slideshow = true;
if(interval === 0) {
slideshow = false;
}
var animation = 'slide';
if(typeof $j(this).data('flex_fx') !== 'undefined' && $j(this).data('flex_fx') !== false) {
animation = $j(this).data('flex_fx');
}
$j(this).flexslider({
animationLoop: true,
controlNav: false,
useCSS: false,
pauseOnAction: true,
pauseOnHover: true,
slideshow: slideshow,
animation: animation,
prevText: "
",
nextText: "
",
animationSpeed: 600,
slideshowSpeed: interval,
start: function(){
setTimeout(function(){$j(".flexslider").fitVids();},100);
}
});
$j('.flex-direction-nav a').click(function(e){
e.preventDefault();
e.stopImmediatePropagation();
e.stopPropagation();
});
});
}
/*
** Init fitVideo function for responsive video files
*/
function fitVideo(){
"use strict";
$j(".portfolio_images").fitVids();
$j(".video_holder").fitVids();
$j(".format-video .post_image").fitVids();
$j(".format-video .q_masonry_blog_post_image").fitVids();
}
/*
** Function for follow portfolio single descripton
*/
var $scrollHeight;
function initPortfolioSingleInfo(){
"use strict";
var $sidebar = $j(".portfolio_single_follow");
if($j(".portfolio_single_follow").length > 0){
var offset = $sidebar.offset();
$scrollHeight = $j(".portfolio_container").height();
var $scrollOffset = $j(".portfolio_container").offset();
var $window = $j(window);
var $headerHeight = parseInt($j('header.page_header').css('height'), 10);
$window.scroll(function() {
if($window.width() > 960){
if ($window.scrollTop() + $headerHeight + 3 > offset.top) {
if ($window.scrollTop() + $headerHeight + $sidebar.height() + 24 < $scrollOffset.top + $scrollHeight) {
$sidebar.stop().animate({
marginTop: $window.scrollTop() - offset.top + $headerHeight
});
} else {
$sidebar.stop().animate({
marginTop: $scrollHeight - $sidebar.height() - 24
});
}
} else {
$sidebar.stop().animate({
marginTop: 0
});
}
}else{
$sidebar.css('margin-top',0);
}
});
}
}
/*
** Init tabs shortcodes
*/
function initTabs(){
"use strict";
if($j('.q_tabs').length){
$j('.q_tabs').appear(function() {
$j('.q_tabs').css('visibility', 'visible');
},{accX: 0, accY: -100});
var $tabsNav = $j('.tabs-nav');
var $tabsNavLis = $tabsNav.children('li');
$tabsNav.each(function() {
var $this = $j(this);
$this.next().children('.tab-content').stop(true,true).hide().first().show();
$this.children('li').first().addClass('active').stop(true,true).show();
});
$tabsNavLis.on('click', function(e) {
var $this = $j(this);
$this.siblings().removeClass('active').end().addClass('active');
$this.parent().next().children('.tab-content').stop(true,true).hide().siblings( $this.find('a').attr('href') ).fadeIn();
e.preventDefault();
});
}
}
/*
** Init accordion and toogle shortcodes
*/
function initAccordion() {
"use strict";
if($j(".q_accordion_holder").length){
$j(".q_accordion_holder").appear(function() {
$j(".q_accordion_holder").css('visibility', 'visible');
},{accX: 0, accY: -100});
if ($j(".accordion").length) {
$j(".accordion").accordion({
animate: "swing",
collapsible: true,
active: false,
icons: "",
heightStyle: "content",
activate: function(event, ui) {
initParallax();
}
});
//define custom options for each accordion
$j(".accordion").each(function() {
var activeTab = parseInt($j(this).data('active-tab'));
if(activeTab !== "") {
activeTab = activeTab - 1; // - 1 because active tab is set in 0 index base
$j(this).accordion('option', 'active', activeTab);
}
var borderRadius = parseInt($j(this).data('border-radius'));
if(borderRadius !== "") {
$j(this).find('.accordion_mark').css('border-radius', borderRadius+"px");
}
var collapsible = ($j(this).data('collapsible') == 'yes') ? true : false;
$j(this).accordion('option', 'collapsible', collapsible);
$j(this).accordion('option', 'collapsible', collapsible);
});
}
$j(".toggle").addClass("accordion ui-accordion ui-accordion-icons ui-widget ui-helper-reset")
.find(".title-holder")
.addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-top ui-corner-bottom")
.hover(function() {
$j(this).toggleClass("ui-state-hover");
})
.click(function() {
$j(this)
.toggleClass("ui-accordion-header-active ui-state-active ui-state-default ui-corner-bottom")
.next().toggleClass("ui-accordion-content-active").slideToggle(400);
return false;
})
.next()
.addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom")
.hide();
$j(".toggle").each(function() {
var activeTab = parseInt($j(this).data('active-tab'));
if(activeTab !== "" && activeTab >= 1) {
activeTab = activeTab - 1; // - 1 because active tab is set in 0 index base
$j(this).find('.ui-accordion-content').eq(activeTab).show();
$j(this).find('.ui-accordion-header').eq(activeTab).addClass('ui-state-active'); //set active accordion header
}
});
}
}
/*
** Function to enable link in accordion
*/
function initAccordionContentLink(){
"use strict";
if($j(".accordion").length){
$j('.accordion_holder .accordion_inner .accordion_content a').click(function(){
if($j(this).attr('target') === '_blank'){
window.open($j(this).attr('href'),'_blank');
}else{
window.open($j(this).attr('href'),'_self');
}
return false;
});
}
}
/*
** Init testimonials shortcode
*/
function initTestimonials(){
"use strict";
if($j('.testimonials_carousel').length){
$j('.testimonials_carousel').each(function(){
var interval = 5000;
if(typeof $j(this).data('auto-rotate-slides') !== 'undefined' && $j(this).data('auto-rotate-slides') !== false) {
interval = parseFloat($j(this).data('auto-rotate-slides')) * 1000;
}
var slideshow = true;
if(interval === 0) {
slideshow = false;
}
var animation = 'fade';
if(typeof $j(this).data('animation-type') !== 'undefined' && $j(this).data('animation-type') !== false) {
animation = $j(this).data('animation-type');
}
var directionNav = true;
if(typeof $j(this).data('show-navigation') !== 'undefined') {
directionNav = $j(this).data('show-navigation') == 'no' ? false : true;
}
var animationSpeed = 600;
if(typeof $j(this).data('animation-speed') !== 'undefined' && $j(this).data('animation-speed') !== false) {
animationSpeed = $j(this).data('animation-speed');
}
$j(this).flexslider({
animationLoop: true,
controlNav: false,
directionNav: directionNav,
useCSS: false,
pauseOnAction: true,
pauseOnHover: false,
slideshow: slideshow,
animation: animation,
itemMargin: 25,
minItems: 1,
maxItems: 1,
animationSpeed: animationSpeed,
slideshowSpeed: interval,
start: function(slider){
initParallax();
}
});
});
}
}
/*
** Function to close message shortcode
*/
function initMessages(){
"use strict";
if($j('.q_message').length){
$j('.q_message').each(function(){
$j(this).find('.close').click(function(e){
e.preventDefault();
$j(this).parent().parent().fadeOut(500);
});
});
}
}
/*
** Init Element Animations
*/
function initElementsAnimation(){
"use strict";
if($j(".element_from_fade").length > 0 && $j('.no_animation_on_touch').length === 0){
$j('.element_from_fade').each(function(){
var $this = $j(this);
$this.appear(function() {
$this.addClass('element_from_fade_on');
},{accX: 0, accY: -100});
});
}
if($j(".element_from_left").length > 0 && $j('.no_animation_on_touch').length === 0){
$j('.element_from_left').each(function(){
var $this = $j(this);
$this.appear(function() {
$this.addClass('element_from_left_on');
},{accX: 0, accY: -100});
});
}
if($j(".element_from_right").length > 0 && $j('.no_animation_on_touch').length === 0){
$j('.element_from_right').each(function(){
var $this = $j(this);
$this.appear(function() {
$this.addClass('element_from_right_on');
},{accX: 0, accY: -100});
});
}
if($j(".element_from_top").length > 0 && $j('.no_animation_on_touch').length === 0){
$j('.element_from_top').each(function(){
var $this = $j(this);
$this.appear(function() {
$this.addClass('element_from_top_on');
},{accX: 0, accY: -100});
});
}
if($j(".element_from_bottom").length > 0 && $j('.no_animation_on_touch').length === 0){
$j('.element_from_bottom').each(function(){
var $this = $j(this);
$this.appear(function() {
$this.addClass('element_from_bottom_on');
},{accX: 0, accY: -100});
});
}
if($j(".element_transform").length > 0 && $j('.no_animation_on_touch').length === 0){
$j('.element_transform').each(function(){
var $this = $j(this);
$this.appear(function() {
$this.addClass('element_transform_on');
},{accX: 0, accY: -100});
});
}
}
/*
** Init audio player for blog layout
*/
function fitAudio(){
"use strict";
$j('audio.blog_audio').mediaelementplayer({
audioWidth: '100%'
});
}
/*
** Init masonry layout for blog template
*/
function initBlog() {
"use strict";
if($j('.blog_holder.masonry').length) {
var width_blog = $j(this).closest('.container_inner').width();
if($j('.blog_holder.masonry').closest(".column_inner").length) {
width_blog = $j('.blog_holder.masonry').closest(".column_inner").width();
}
$j('.blog_holder.masonry').width(width_blog);
var $container = $j('.blog_holder.masonry');
$container.waitForImages(function() {
setTimeout(function() {
$container.isotope({
itemSelector: 'article',
resizable: false,
masonry: {columnWidth: '.blog_holder_grid_sizer', gutter: '.blog_holder_grid_gutter'}
});
$j('.blog_holder.masonry').animate({opacity: "1"}, 500);
}, 400);
});
$j('.filter').click(function() {
var selector = $j(this).attr('data-filter');
$container.isotope({filter: selector});
return false;
});
if($container.hasClass('masonry_infinite_scroll')) {
$container.infinitescroll({
navSelector: '.blog_infinite_scroll_button span',
nextSelector: '.blog_infinite_scroll_button span a',
itemSelector: 'article',
loading: {
finishedMsg: finished_text,
msgText: loading_text
}
},
// call Isotope as a callback
function(newElements) {
$container.isotope('appended', $j(newElements));
fitVideo();
fitAudio();
initFlexSlider();
setTimeout(function() {
$j('.blog_holder.masonry').isotope('layout');
}, 400);
}
);
} else if($container.hasClass('masonry_load_more')) {
var i = 1;
$j('.blog_load_more_button a').off('click tap').on('click tap', function(e) {
e.preventDefault();
var load_more_holder = $j('.blog_load_more_button');
var load_more_loading = $j('.blog_load_more_button_loading');
load_more_holder.hide();
load_more_loading.show();
var link = $j(this).attr('href');
var $content = '.masonry_load_more';
var $anchor = '.blog_load_more_button a';
var $next_href = $j($anchor).attr('href');
$j.get(link + '', function(data) {
var $new_content = $j($content, data).wrapInner('').html();
$next_href = $j($anchor, data).attr('href');
$container.append($j($new_content)).isotope('reloadItems').isotope({sortBy: 'original-order'});
fitVideo();
fitAudio();
initFlexSlider();
setTimeout(function() {
$j('.blog_holder.masonry').isotope('layout');
}, 400);
load_more_holder.show();
load_more_loading.hide();
if($j('.blog_load_more_button span').attr('rel') > i) {
$j('.blog_load_more_button a').attr('href', $next_href); // Change the next URL
} else {
$j('.blog_load_more_button').remove();
}
});
i++;
});
}
}
}
/*
** Init full width masonry layout for blog template
*/
function initBlogMasonryFullWidth(){
"use strict";
if($j('.masonry_full_width').length){
var width_blog = $j('.full_width_inner').width();
$j('.masonry_full_width').width(width_blog);
var $container = $j('.masonry_full_width');
$j('.filter').click(function(){
var selector = $j(this).attr('data-filter');
$container.isotope({ filter: selector });
return false;
});
if( $container.hasClass('masonry_infinite_scroll')){
$container.infinitescroll({
navSelector : '.blog_infinite_scroll_button span',
nextSelector : '.blog_infinite_scroll_button span a',
itemSelector : 'article',
loading: {
finishedMsg: finished_text,
msgText : loading_text
}
},
// call Isotope as a callback
function( newElements ) {
$container.isotope( 'appended', $j( newElements ) );
fitVideo();
fitAudio();
initFlexSlider();
setTimeout(function() {
$j('.blog_holder.masonry_full_width').isotope( 'layout');
}, 400);
}
);
}else if($container.hasClass('masonry_load_more')){
var i = 1;
$j('.blog_load_more_button a').off('click tap').on('click tap', function(e) {
e.preventDefault();
var link = $j(this).attr('href');
var $content = '.masonry_load_more';
var $anchor = '.blog_load_more_button a';
var $next_href = $j($anchor).attr('href');
$j.get(link+'', function(data){
var $new_content = $j($content, data).wrapInner('').html();
$next_href = $j($anchor, data).attr('href');
$container.append( $j( $new_content) ).isotope( 'reloadItems' ).isotope({ sortBy: 'original-order' });
fitVideo();
fitAudio();
initFlexSlider();
setTimeout(function() {
$j('.blog_holder.masonry_full_width').isotope( 'layout');
}, 400);
if($j('.blog_load_more_button span').attr('rel') > i) {
$j('.blog_load_more_button a').attr('href', $next_href); // Change the next URL
} else {
$j('.blog_load_more_button').remove();
}
});
i++;
});
}
$container.waitForImages(function() {
setTimeout(function() {
$container.isotope({
itemSelector: 'article',
resizable: false,
masonry: { columnWidth: '.blog_holder_grid_sizer',gutter: '.blog_holder_grid_gutter'}
});
$j('.masonry_full_width').animate({opacity: "1"}, 500);
}, 400);
});
}
}
/*
** Min height for smaall image blog
*/
function initSmallImageBlogHeight(){
"use strict";
if($j('.blog_small_image').length){
$j('article').each(function() {
$j(this).find('.post_text_inner').css('min-height', $j(this).find('.post_image').height() - 46); //46 is top and bottom padding
});
}
}
/*
** Init masonry layout for blog masonry shortcode
*/
function initQBlog(){
"use strict";
if($j('.q_masonry_blog').length){
$j('.q_masonry_blog').each(function() {
var width_blog;
width_blog = $j(this).parents('.container_inner').width();
if($j('.full_width').length && $j(this).parents('.grid_section').length == 0){
width_blog = $j('.full_width').width();
}else{
if($j(this).parents(".column_inner").length) {
width_blog = $j(this).parents(".column_inner").width();
}
}
$j(this).width(width_blog);
var $container = $j(this);
var $cols = 3;
if($j('.full_width').length && $j(this).parents('.grid_section').length == 0){
if($container.width() < 480) {
$cols = 1;
} else if($container.width() <= 703) {
$cols = 2;
} else if($container.width() <= 920) {
$cols = 3;
} else if($container.width() <= 1320) {
$cols = 4;
} else{
$cols = 5;
}
} else{
if($container.width() < 420) {
$cols = 1;
} else if($container.width() <= 805) {
$cols = 2;
}
}
$container.isotope({
itemSelector: 'article',
resizable: false,
masonry: { columnWidth: $j('.q_masonry_blog').width() / $cols }
});
$j(window).resize(function(){
if($j('.full_width').length && $j(this).parents('.grid_section').length == 0){
if($container.width() < 480) {
$cols = 1;
} else if($container.width() <= 703) {
$cols = 2;
} else if($container.width() <= 920) {
$cols = 3;
} else if($container.width() <= 1320) {
$cols = 4;
} else {
$cols = 5;
}
} else{
if($container.width() < 420) {
$cols = 1;
} else if($container.width() <= 785) {
$cols = 2;
} else {
$cols = 3;
}
}
$container.isotope({
masonry: { columnWidth: $container.width() / $cols}
});
});
$j(this).animate({opacity: "1"}, 500);
});
}
}
/*
** Init progress bar with icon
*/
var timeOuts = [];
function initProgressBarsIcon(){
"use strict";
if($j('.q_progress_bars_icons_holder').length){
$j('.q_progress_bars_icons_holder').each(function() {
var $this = $j(this);
$this.appear(function() {
$this.find('.q_progress_bars_icons').css('opacity','1');
$this.find('.q_progress_bars_icons').each(function() {
var number = $j(this).find('.q_progress_bars_icons_inner').data('number');
var size = $j(this).find('.q_progress_bars_icons_inner').data('size');
if(size !== ""){
$j(this).find('.q_progress_bars_icons_inner.custom_size .bar').css({'width': size+'px','height':size+'px'});
$j(this).find('.q_progress_bars_icons_inner.custom_size .bar .fa-stack').css({'font-size': size/2+'px'});
}
var bars = $j(this).find('.bar');
bars.each(function(i){
if(i < number){
var time = (i + 1)*150;
timeOuts[i] = setTimeout(function(){
$j(bars[i]).addClass('active');
},time);
}
});
});
},{accX: 0, accY: -200});
});
}
}
(function( $ ){
"use strict";
var $window = $(window);
$.fn.masonryParallax = function(speedFactor, outerHeight, startPosition) {
var $this = $(this);
var getHeight;
var firstTop;
var startPositionAdd = 0;
//get the starting position of element to have parallax applied to it
firstTop = $this.offset().top;
//get the height element
if (outerHeight) {
getHeight = function(jqo) {
return jqo.outerHeight(true);
};
} else {
getHeight = function(jqo) {
return jqo.height();
};
}
//get type so elements could take it's initial position
if(startPosition != 0){
startPositionAdd = startPosition;
}
// setup defaults if arguments aren't specified
if (arguments.length < 1 || speedFactor === null) speedFactor = 0.1;
if (arguments.length < 2 || outerHeight === null) outerHeight = true;
// function to be called whenever the window is scrolled or resized
var top = $this.offset().top;
var height = getHeight($this);
function update(){
// Check if totally above or totally below viewport
if (top + height < $scroll || top > $scroll + $window_height) {
return;
}
$this.css('transform', 'translate3d(0px, '+ (Math.round((firstTop - height - $scroll) * speedFactor + startPositionAdd)) +'px, 0px)');
}
$window.bind('scroll', update).resize(update);
update();
};
})(jQuery);
/**
* Masonry gallery, init masonry and resize pictures in grid
*/
function initMasonryGallery(){
"use strict";
resizeMasonryGallery($j('.grid-sizer').width());
if($j('.masonry_gallery_holder').length){
$j('.masonry_gallery_holder').each(function(){
var $this = $j(this);
$this.waitForImages(function(){
$this.animate({opacity:1});
$this.isotope({
itemSelector: '.masonry_gallery_item',
masonry: {
columnWidth: '.grid-sizer'
}
});
$this.find('.masonry_gallery_item.parallax_item').each(function(i){
$j(this).masonryParallax($this.data('parallax_item_speed'), true, $this.data('parallax_item_offset'));
});
});
});
$j(window).resize(function(){
resizeMasonryGallery($j('.grid-sizer').width());
$j('.masonry_gallery_holder').isotope('reloadItems');
});
}
}
function resizeMasonryGallery(size){
"use strict";
var rectangle_portrait = $j('.masonry_gallery_holder .rectangle_portrait');
var rectangle_landscape = $j('.masonry_gallery_holder .rectangle_landscape');
var square_big = $j('.masonry_gallery_holder .square_big');
var square_small = $j('.masonry_gallery_holder .square_small');
rectangle_portrait.css('height', 2*size);
if (window.innerWidth < 600) {
rectangle_landscape.css('height', size/2);
}
else {
rectangle_landscape.css('height', size);
}
square_big.css('height', 2*size);
if (window.innerWidth < 600) {
square_big.css('height', square_big.width());
}
square_small.css('height', size);
}
/*
** Init more facts shortcode
*/
function initMoreFacts(){
"use strict";
if($j('.more_facts_holder').length){
$j('.more_facts_holder').each(function(){
var $this = $j(this);
var $more_label = 'More Facts';
if($j(this).find('.more_facts_button').data('morefacts') !== ""){
$more_label = $j(this).find('.more_facts_button').data('morefacts');
}
var $less_label = 'Less Facts';
if($j(this).find('.more_facts_button').data('lessfacts') !== ""){
$less_label = $j(this).find('.more_facts_button').data('lessfacts');
}
var height = $this.find('.more_facts_inner').height() + 70;
var speed;
if(height > 0 && height < 601){
speed = 800;
} else if(height > 600 && height < 1201){
speed = 1500;
} else{
speed = 2100;
}
$this.find('.more_facts_outer').css({'height':'0px','display':'none','opacity':'0'});
$this.find('.more_facts_button').on("mouseenter",function(){
$j(this).css('color',$j(this).data('hovercolor'));
}).on("mouseleave",function() {
if(!$this.find('.more_facts_outer').is(':visible')){
$j(this).css('color',$j(this).data('color'));
}
});
$this.find('.more_facts_button').click(function(){
if(!$this.find('.more_facts_outer').is(':visible')){
$this.find('.more_facts_fake_arrow').fadeIn(speed);
$this.addClass('more_fact_opened');
$j(this).parent().parent().find('.more_facts_outer').css({'display':'block','opacity':'1'}).stop().animate({'height': height+30}, speed, function() {
if($j('.parallax_section_holder').length) {
initParallax();
}
});
$j(this).find('.more_facts_button_text').text($less_label);
$j(this).find('.more_facts_button_arrow').addClass('rotate_arrow');
} else {
$this.find('.more_facts_fake_arrow').fadeOut(speed);
$j(this).parent().parent().find('.more_facts_outer').stop().animate({'height': '0px'}, speed,function(){
$j(this).css({'display':'none','opacity':'0'});
if(!$this.find('.more_facts_button').is(":hover")){$this.find('.more_facts_button').css('color',$this.find('.more_facts_button').data('color'));}
$this.removeClass('more_fact_opened');
if($j('.parallax_section_holder').length) {
initParallax();
}
});
$j(this).find('.more_facts_button_text').text($more_label);
$j(this).find('.more_facts_button_arrow').removeClass('rotate_arrow');
}
});
});
}
}
/*
** Replace plceholder
*/
function placeholderReplace(){
"use strict";
$j('#contact-form [placeholder]').focus(function() {
var input = $j(this);
if (input.val() === input.attr('placeholder')) {
if (this.originalType) {
this.type = this.originalType;
delete this.originalType;
}
input.val('');
input.removeClass('placeholder');
}
}).blur(function() {
var input = $j(this);
if (input.val() === '') {
if (this.type === 'password') {
this.originalType = this.type;
this.type = 'text';
}
input.addClass('placeholder');
input.val(input.attr('placeholder'));
}
}).blur();
$j('#contact-form [placeholder]').parents('form').submit(function () {
$j(this).find('[placeholder]').each(function () {
var input = $j(this);
if (input.val() === input.attr('placeholder')) {
input.val('');
}
});
});
}
function totop_button(a) {
"use strict";
var b = $j("#back_to_top");
b.removeClass("off on");
if (a === "on") { b.addClass("on"); } else { b.addClass("off"); }
}
function backButtonShowHide(){
"use strict";
$j(window).scroll(function () {
var b = $j(this).scrollTop();
var c = $j(this).height();
var d;
if (b > 0) { d = b + c / 2; } else { d = 1; }
if (d < 1e3) { totop_button("off"); } else { totop_button("on"); }
});
}
function backToTop(){
"use strict";
$j(document).on('click','#back_to_top',function(e){
e.preventDefault();
$j('body,html').animate({scrollTop: 0}, $j(window).scrollTop()/3, 'linear');
});
}
/*
** Init steps
*/
function initSteps(){
"use strict";
if($j('.q_steps_holder').length){
$j('.q_steps_holder').each(function(){
$j(this).appear(function() {
$j(this).addClass('show');
},{accX: 0, accY: -200});
});
}
}
/*
** Init message height
*/
function initMessageHeight(){
"use strict";
if($j('.q_message.with_icon').length){
$j('.q_message.with_icon').each(function(){
if($j(this).find('.message_text_holder').height() > $j(this).find('.q_message_icon_holder').height()) {
$j(this).find('.q_message_icon_holder').height($j(this).find('.message_text').height());
} else {
$j(this).find('.message_text').height($j(this).find('.q_message_icon_holder').height());
}
});
}
}
/**
* Init image hover
*/
function initImageHover() {
"use strict";
if($j('.image_hover').length){
$j('.image_hover').each(function(){
$j(this).appear(function() {
var default_visible_time = 300;
var transition_delay = $j(this).attr('data-transition-delay');
var real_transition_delay = default_visible_time + parseFloat(transition_delay);
var object = $j(this);
//wait for other hovers to complete
setTimeout(function() {
object.addClass('show');
}, parseFloat(transition_delay));
//hold that image a little, than remove class
setTimeout(function() {
object.removeClass('show');
}, real_transition_delay);
},{accX: 0, accY: -200});
});
}
}
/*
* Initializes vertical progress bars
*/
function initProgressBarsVertical(){
"use strict";
if($j('.q_progress_bars_vertical').length){
$j('.q_progress_bars_vertical').each(function() {
$j(this).appear(function() {
initToCounterVerticalProgressBar($j(this));
var percentage = $j(this).find('.progress_content').data('percentage');
$j(this).find('.progress_content').css('height', '0%');
$j(this).find('.progress_content').animate({
height: percentage+'%'
}, 1500);
},{accX: 0, accY: -200});
});
}
}
/*
* Initializes vertical progress bar count to max value
*/
function initToCounterVerticalProgressBar($this){
"use strict";
if($this.find('.progress_number span').length){
$this.find('.progress_number span').each(function() {
var $max = parseFloat($j(this).text());
$j(this).countTo({
from: 0,
to: $max,
speed: 1500,
refreshInterval: 50
});
});
}
}
/*
* Check if there is anchor on load and scroll to it
*/
function checkAnchorOnLoad(){
"use strict";
var hash = window.location.hash;
var paspartuScrollAdd = $j('body').hasClass('paspartu_on_top_fixed') ? $window_width*paspartu_width : 0;
var scrollToAmount;
var top_header_height;
if(hash !== "" && $j('[data-q_id="'+hash+'"]').length > 0){
if($j('header.page_header').hasClass('fixed') && !$j('body').hasClass('vertical_menu_enabled')){
if($j('header.page_header').hasClass('scroll_top')){
top_header_height = header_top_height;
}else{
top_header_height = 0;
}
if(!$j('header.page_header').hasClass('transparent') || $j('header.page_header').hasClass('scrolled_not_transparent')) {
if(header_height - ($j('[data-q_id="' + hash + '"]').offset().top + top_header_height)/4 >= min_header_height_scroll){
var diff_of_header_and_section = $j('[data-q_id="' + hash + '"]').offset().top - header_height - paspartuScrollAdd;
scrollToAmount = diff_of_header_and_section + (diff_of_header_and_section/4) + (diff_of_header_and_section/16) + (diff_of_header_and_section/64) + 1; //several times od dividing to minimize the error, because fixed header is shrinking while scroll, 1 is just to ensure
}else{
if($j('header.page_header').hasClass('centered_logo')){
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - min_header_height_scroll - logo_height - 30 - paspartuScrollAdd; //30 is top/bottom margin of logo
} else {
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - min_header_height_scroll - paspartuScrollAdd;
}
}
}else{
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - paspartuScrollAdd;
}
} else if($j('header.page_header').hasClass('fixed_top_header') && !$j('body').hasClass('vertical_menu_enabled')){
if(!$j('header.page_header').hasClass('transparent') || $j('header.page_header').hasClass('scrolled_not_transparent')){
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - header_top_height - paspartuScrollAdd;
}else{
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - paspartuScrollAdd;
}
} else if($j('header.page_header').hasClass('fixed_hiding') && !$j('body').hasClass('vertical_menu_enabled')){
if(!$j('header.page_header').hasClass('transparent') || $j('header.page_header').hasClass('scrolled_not_transparent')) {
if ($j('[data-q_id="' + hash + '"]').offset().top - (header_height + logo_height / 2 + 40) <= scroll_amount_for_fixed_hiding) {
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - header_height - logo_height / 2 - 40 - paspartuScrollAdd; //40 is top/bottom margin of logo
} else {
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - min_header_height_fixed_hidden - 40 - paspartuScrollAdd; //40 is top/bottom margin of logo
}
}else{
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - paspartuScrollAdd;
}
}else if($j('header.page_header').hasClass('stick') || $j('header.page_header').hasClass('stick_with_left_right_menu') && !$j('body').hasClass('vertical_menu_enabled')) {
if(!$j('header.page_header').hasClass('transparent') || $j('header.page_header').hasClass('scrolled_not_transparent')) {
if (sticky_amount >= $j('[data-q_id="' + hash + '"]').offset().top) {
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top + 1 - paspartuScrollAdd; // 1 is to show sticky menu
} else {
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - min_header_height_sticky - paspartuScrollAdd;
}
}else{
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - paspartuScrollAdd;
}
} else{
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - paspartuScrollAdd;
}
$j('html, body').animate({
scrollTop: Math.round(scrollToAmount)
}, 1500, function() {});
}
//remove active state on anchors if section is not visible
$j(".main_menu a, .vertical_menu a, .mobile_menu a").each(function(){
var i = $j(this).prop("hash");
if(i !== "" && ($j('[data-q_id="' + i + '"]').length > 0) && ($j('[data-q_id="' + i + '"]').offset().top >= $window_height) && $scroll === 0){
$j(this).parent().removeClass('active');
$j(this).removeClass('current');
}
});
}
/*
* Check active state of anchor links on scroll
*/
function changeActiveState(id){
"use strict";
$j('.main_menu a').parent().removeClass('active');
$j(".main_menu a").each(function(){
var i = $j(this).prop("hash");
if(i === id){
if($j(this).closest('.second').length === 0){
$j(this).parent().addClass('active');
}else{
$j(this).closest('.second').parent().addClass('active');
}
$j('.main_menu a').removeClass('current');
$j(this).addClass('current');
}
});
$j('.vertical_menu a').parent().removeClass('active');
$j(".vertical_menu a").each(function(){
var i = $j(this).prop("hash");
if(i === id){
if($j(this).closest('.second').length === 0){
$j(this).parent().addClass('active');
}else{
$j(this).closest('.second').parent().addClass('active');
}
$j('.vertical_menu a').removeClass('current');
$j(this).addClass('current');
}
});
$j('.mobile_menu a').parent().removeClass('active');
$j(".mobile_menu a").each(function(){
var i = $j(this).prop("hash");
if(i === id){
if($j(this).closest('.sub_menu').length === 0){
$j(this).parent().addClass('active');
}else{
$j(this).closest('.sub_menu').parent().addClass('active');
}
$j('.mobile_menu a').removeClass('current');
$j(this).addClass('current');
}
});
}
/*
* Check active state of anchor links on scroll
*/
function checkAnchorOnScroll(){
"use strict";
if($j('[data-q_id]').length && !$j('header.page_header').hasClass('regular')){
$j('[data-q_id]').waypoint( function(direction) {
if(direction === 'down') {
changeActiveState($j(this).data("q_id"));
}
}, { offset: '50%' });
$j('[data-q_id]').waypoint( function(direction) {
if(direction === 'up') {
changeActiveState($j(this).data("q_id"));
}
}, { offset: function(){
return -($j(this).outerHeight() - 150);
} });
}
}
/*
* Init scroll to section link if that link has hash value
*/
function initHashClick(){
"use strict";
var $doc = $j('html, body');
var paspartuScrollAdd = $j('body').hasClass('paspartu_on_top_fixed') ? $window_width*paspartu_width : 0;
var scrollToAmount;
$j(document).on( "click", ".main_menu a, .vertical_menu a, .qbutton:not(.contact_form_button), .anchor, .widget li.anchor a", function(){
var $this = $j(this);
var hash = $j(this).prop("hash");
var top_header_height;
if((hash !== "" && $j(this).attr('href').split('#')[0] === "") || (hash !== "" && $j(this).attr('href').split('#')[0] !== "" && hash === window.location.hash) || (hash !== "" && $j(this).attr('href').split('#')[0] === window.location.href.split('#')[0])){ //in third condition 'hash !== ""' stays to prevent reload of page when link is active and ajax enabled
if($j('header.page_header').hasClass('fixed') && !$j('body').hasClass('vertical_menu_enabled')){
if($j('header.page_header').hasClass('scroll_top')){
top_header_height = header_top_height;
}else{
top_header_height = 0;
}
if(!$j('header.page_header').hasClass('transparent') || $j('header.page_header').hasClass('scrolled_not_transparent')) {
if (header_height - ($j('[data-q_id="' + hash + '"]').offset().top + top_header_height) / 4 >= min_header_height_scroll) {
var diff_of_header_and_section = $j('[data-q_id="' + hash + '"]').offset().top - header_height - paspartuScrollAdd;
scrollToAmount = diff_of_header_and_section + (diff_of_header_and_section / 4) + (diff_of_header_and_section / 16) + (diff_of_header_and_section / 64) + 1; //several times od dividing to minimize the error, because fixed header is shrinking while scroll, 1 is just to ensure
} else {
if($j('header.page_header').hasClass('centered_logo')){
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - min_header_height_scroll - logo_height - paspartuScrollAdd - 30; //30 is top/bottom margin of logo
} else {
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - min_header_height_scroll - paspartuScrollAdd;
}
}
}else{
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - paspartuScrollAdd;
}
} else if($j('header.page_header').hasClass('fixed_top_header') && !$j('body').hasClass('vertical_menu_enabled')){
if(!$j('header.page_header').hasClass('transparent') || $j('header.page_header').hasClass('scrolled_not_transparent')){
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - header_top_height - paspartuScrollAdd;
}else{
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - paspartuScrollAdd;
}
} else if($j('header.page_header').hasClass('fixed_hiding') && !$j('body').hasClass('vertical_menu_enabled')){
if(!$j('header.page_header').hasClass('transparent') || $j('header.page_header').hasClass('scrolled_not_transparent')) {
if ($j('[data-q_id="' + hash + '"]').offset().top - (header_height + logo_height / 2 + 40) <= scroll_amount_for_fixed_hiding) {
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - header_height - logo_height / 2 - 40 - paspartuScrollAdd; //40 is top/bottom margin of logo
} else {
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - min_header_height_fixed_hidden - 40 - paspartuScrollAdd; //40 is top/bottom margin of logo
}
}else{
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - paspartuScrollAdd;
}
}else if($j('header.page_header').hasClass('stick') || $j('header.page_header').hasClass('stick_with_left_right_menu') && !$j('body').hasClass('vertical_menu_enabled')) {
if(!$j('header.page_header').hasClass('transparent') || $j('header.page_header').hasClass('scrolled_not_transparent')) {
if (sticky_amount >= $j('[data-q_id="' + hash + '"]').offset().top) {
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top + 1 - paspartuScrollAdd; // 1 is to show sticky menu
} else {
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - min_header_height_sticky - paspartuScrollAdd;
}
}else{
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - paspartuScrollAdd;
}
} else{
scrollToAmount = $j('[data-q_id="' + hash + '"]').offset().top - paspartuScrollAdd;
}
if($j('[data-q_id="'+hash+'"]').length > 0){
$doc.stop().animate({
scrollTop: Math.round(scrollToAmount)
}, 1500, function() {
anchorActiveState($this);
});
}
if(history.pushState) {
history.pushState(null, null, hash);
}
return false;
}
});
$j(document).on( "click", ".mobile_menu a", function(){
var $this = $j(this);
var hash = $j(this).prop("hash");
if((hash !== "" && $j(this).attr('href').split('#')[0] === "") || (hash !== "" && $j(this).attr('href').split('#')[0] !== "" && hash === window.location.hash) || (hash !== "" && $j(this).attr('href').split('#')[0] === window.location.href.split('#')[0])){ //in third condition 'hash !== ""' stays to prevent reload of page when link is active and ajax enabled
if($j('[data-q_id="'+hash+'"]').length > 0){
$doc.animate({
scrollTop: Math.round($j('[data-q_id="'+hash+'"]').offset().top - $j('.mobile_menu').height())
}, 500,function(){
anchorActiveState($this);
});
}
if(history.pushState) {
history.pushState(null, null, hash);
}
return false;
}
});
}
/*
** Add class to items in last row in clients shortcode
*/
function countClientsPerRow(){
"use strict";
if($j('.qode_clients').length){
$j('.qode_clients').each(function() {
var $clients = $j(this);
var qode_clients_height = $clients.height();
var qode_clients_width = $clients.width();
var maxHeightClient;
var clientWidth = $clients.find('.qode_client_holder').width();
var countClient = $clients.find('.qode_client_holder').length;
$clients.find('.qode_client_holder').each(function() {
maxHeightClient = maxHeightClient > $j(this).height() ? maxHeightClient : $j(this).height();
});
maxHeightClient = maxHeightClient + 35; //margin for client is 35
var numberOfRows = Math.ceil(qode_clients_height / maxHeightClient);
var numberOfClientsPerRow = Math.ceil(qode_clients_width/clientWidth);
var numberOffullRows = Math.floor(countClient / numberOfClientsPerRow);
var numberOfClientsInLastRow = countClient - (numberOfClientsPerRow * numberOffullRows);
if(numberOfClientsInLastRow === 0){
numberOfClientsInLastRow = numberOfClientsPerRow;
}
$clients.find( ".qode_client_holder" ).removeClass('border-bottom-none');
var item_start_from = countClient - numberOfClientsInLastRow - 1;
$clients.find( ".qode_client_holder:gt("+ item_start_from +")" ).addClass('border-bottom-none');
});
}
}
/*
** Calculate height for animated text icon shortcode
*/
function animatedTextIconHeight(){
"use strict";
if($j('.animated_icons_with_text').length){
var $icons = $j('.animated_icons_with_text');
var maxHeight;
$icons.find('.animated_text p').each(function() {
maxHeight = maxHeight > $j(this).height() ? maxHeight : $j(this).height();
});
if(maxHeight < 155) {
maxHeight = 155;
}
$icons.find('.animated_icon_with_text_inner').height(maxHeight);
}
}
/*
** Add class to items in last row in animated text icon shortcode
*/
function countAnimatedTextIconPerRow(){
"use strict";
if($j('.animated_icons_with_text').length){
$j('.animated_icons_with_text').each(function() {
var $icons = $j(this);
var qode_icons_height = $icons.height();
var qode_icons_width = $icons.width();
var maxHeightIcons;
var iconWidth = $icons.find('.animated_icon_with_text_holder').width() + 1; // 1px because safari round on smaller number
var countIcons = $icons.find('.animated_icon_with_text_holder').length;
$icons.find('.animated_icon_with_text_holder').each(function() {
maxHeightIcons = maxHeightIcons > $j(this).height() ? maxHeightIcons : $j(this).height();
});
maxHeightIcons = maxHeightIcons + 30; //margin for client is 30
var numberOfIconsPerRow = Math.ceil((qode_icons_width/iconWidth));
var numberOffullRows = Math.floor(countIcons / numberOfIconsPerRow);
var numberOfIconsInLastRow = countIcons - (numberOfIconsPerRow * numberOffullRows);
if(numberOfIconsInLastRow === 0){
numberOfIconsInLastRow = numberOfIconsPerRow;
}
$icons.find( ".animated_icon_with_text_holder" ).removeClass('border-bottom-none');
var item_start_from = countIcons - numberOfIconsInLastRow - 1;
$icons.find( ".animated_icon_with_text_holder:gt("+ item_start_from +")" ).addClass('border-bottom-none');
});
}
}
/*
* Set active state in maim menu on anchor click
*/
function anchorActiveState(me){
if(me.closest('.main_menu').length > 0){
$j('.main_menu a').parent().removeClass('active');
}
if(me.closest('.vertical_menu').length > 0){
$j('.vertical_menu a').parent().removeClass('active');
}
if(me.closest('.second').length === 0){
me.parent().addClass('active');
}else{
me.closest('.second').parent().addClass('active');
}
if(me.closest('.mobile_menu').length > 0){
$j('.mobile_menu a').parent().removeClass('active');
me.parent().addClass('active');
}
$j('.mobile_menu a, .main_menu a, .vertical_menu a').removeClass('current');
me.addClass('current');
}
/*
** Video background initialization
*/
function initVideoBackground(){
"use strict";
$j('.video-wrap .video').mediaelementplayer({
enableKeyboard: false,
iPadUseNativeControls: false,
pauseOtherPlayers: false,
// force iPhone's native controls
iPhoneUseNativeControls: false,
// force Android's native controls
AndroidUseNativeControls: false
});
//mobile check
if(navigator.userAgent.match(/(Android|iPod|iPhone|iPad|IEMobile|Opera Mini)/)){
initVideoBackgroundSize();
$j('.mobile-video-image').show();
$j('.video-wrap').remove();
}
}
/*
** Calculate video background size
*/
function initVideoBackgroundSize(){
"use strict";
$j('.section .video-wrap').each(function(i){
var $sectionWidth = $j(this).closest('.section').outerWidth();
$j(this).width($sectionWidth);
var $sectionHeight = $j(this).closest('.section').outerHeight();
min_w = vid_ratio * ($sectionHeight+20);
$j(this).height($sectionHeight);
var scale_h = $sectionWidth / video_width_original;
var scale_v = ($sectionHeight - header_height) / video_height_original;
var scale = scale_v;
if (scale_h > scale_v)
scale = scale_h;
if (scale * video_width_original < min_w) {scale = min_w / video_width_original;}
$j(this).find('video, .mejs-overlay, .mejs-poster').width(Math.ceil(scale * video_width_original +2));
$j(this).find('video, .mejs-overlay, .mejs-poster').height(Math.ceil(scale * video_height_original +2));
$j(this).scrollLeft(($j(this).find('video').width() - $sectionWidth) / 2);
$j(this).find('.mejs-overlay, .mejs-poster').scrollTop(($j(this).find('video').height() - ($sectionHeight)) / 2);
$j(this).scrollTop(($j(this).find('video').height() - ($sectionHeight)) / 2);
});
$j('.carousel .item .video .video-wrap').each(function(i){
var $slideWidth = $j(window).width();
$j(this).width($slideWidth);
var mob_header = $j(window).width() < 1000 ? $j('header.page_header').height() - 6 : 0; // 6 is because of the display: inline-block
var $slideHeight = $j(this).closest('.carousel.slide').height() - mob_header;
min_w = vid_ratio * ($slideHeight+20);
$j(this).height($slideHeight);
var scale_h = $slideWidth / video_width_original;
var scale_v = ($slideHeight - header_height) / video_height_original;
var scale = scale_v;
if (scale_h > scale_v)
scale = scale_h;
if (scale * video_width_original < min_w) {scale = min_w / video_width_original;}
$j(this).find('video, .mejs-overlay, .mejs-poster').width(Math.ceil(scale * video_width_original +2));
$j(this).find('video, .mejs-overlay, .mejs-poster').height(Math.ceil(scale * video_height_original +2));
$j(this).scrollLeft(($j(this).find('video').width() - $slideWidth) / 2);
$j(this).find('.mejs-overlay, .mejs-poster').scrollTop(($j(this).find('video').height() - ($slideHeight)) / 2);
$j(this).scrollTop(($j(this).find('video').height() - ($slideHeight)) / 2);
});
$j('.portfolio_single .video .video-wrap, .blog_holder .video .video-wrap').each(function(i){
var $this = $j(this);
var $videoWidth = $j(this).closest('.video').outerWidth();
$j(this).width($videoWidth);
var $videoHeight = ($videoWidth*9)/16;
if(navigator.userAgent.match(/(Android|iPod|iPhone|iPad|IEMobile|Opera Mini)/)){
$this.parent().width($videoWidth);
$this.parent().height($videoHeight);
}
min_w = vid_ratio * ($videoHeight+20);
$j(this).height($videoHeight);
var scale_h = $videoWidth / video_width_original;
var scale_v = ($videoHeight - header_height) / video_height_original;
var scale = scale_v;
if (scale_h > scale_v)
scale = scale_h;
if (scale * video_width_original < min_w) {scale = min_w / video_width_original;}
$j(this).find('video, .mejs-overlay, .mejs-poster').width(Math.ceil(scale * video_width_original +2));
$j(this).find('video, .mejs-overlay, .mejs-poster').height(Math.ceil(scale * video_height_original +2));
$j(this).scrollLeft(($j(this).find('video').width() - $videoWidth) / 2);
$j(this).find('.mejs-overlay, .mejs-poster').scrollTop(($j(this).find('video').height() - ($videoHeight)) / 2);
$j(this).scrollTop(($j(this).find('video').height() - ($videoHeight)) / 2);
});
}
/*
** Icon With Text animation effect
*/
function initIconWithTextAnimation(){
"use strict";
if($j('.q_icon_animation').length > 0 && $j('.no_animation_on_touch').length === 0){
$j('.q_icon_animation').each(function(){
$j(this).appear(function() {
$j(this).addClass('q_show_animation');
},{accX: 0, accY: -200});
});
}
}
/*
** Add class on body if browser is Safari
*/
function initCheckSafariBrowser(){
"use strict";
if (navigator.userAgent.indexOf('Safari') !== -1 && navigator.userAgent.indexOf('Chrome') === -1) {
$j('body').addClass('safari_browser');
}
}
/*
** Initialize Qode search form
*/
function initSearchButton(){
if($j('.search_slides_from_window_top').length){
$j('.search_slides_from_window_top').click(function(e){
e.preventDefault();
if($j('html').hasClass('touch')){
if ($j('.qode_search_form').height() == "0") {
$j('.qode_search_form input[type="text"]').onfocus = function () {
window.scrollTo(0, 0);
document.body.scrollTop = 0;
};
$j('.qode_search_form input[type="text"]').onclick = function () {
window.scrollTo(0, 0);
document.body.scrollTop = 0;
};
$j('.header_top_bottom_holder').css('top','50px');
$j('.qode_search_form').css('height','50px');
$j('.content_inner').css('margin-top','50px');
if($scroll < 34){ $j('header.page_header').css('top','0'); }
} else {
$j('.qode_search_form').css('height','0');
$j('.header_top_bottom_holder').css('top','0');
$j('.content_inner').css('margin-top','0');
if($scroll < 34){ $j('header.page_header').css('top',-$scroll);}
}
$j(window).scroll(function() {
if ($j('.qode_search_form').height() != "0" && $scroll > 50) {
$j('.qode_search_form').css('height','0');
$j('.header_top_bottom_holder').css('top','0');
$j('.content_inner').css('margin-top','0');
}
});
$j('.qode_search_close').click(function(e){
e.preventDefault();
$j('.qode_search_form').css('height','0');
$j('.header_top_bottom_holder').css('top','0');
$j('.content_inner').css('margin-top','0');
if($scroll < 34){ $j('header.page_header').css('top',-$scroll);}
});
} else {
if($j('.title').hasClass('has_fixed_background')){
var yPos = parseInt($j('.title.has_fixed_background').css('backgroundPosition').split(" ")[1]);
}else {
var yPos = 0;
}
if ($j('.qode_search_form').height() == "0") {
$j('.qode_search_form input[type="text"]').focus();
$j('.header_top_bottom_holder').stop().animate({top:"50px"},150);
$j('.qode_search_form').stop().animate({height:"50px"},150);
$j('.content_inner').stop().animate({marginTop:"50px"},150);
if($scroll < 34){ $j('header.page_header').stop().animate({top:0},150); }
$j('.title.has_fixed_background').animate({
'background-position-y': (yPos + 50)+'px'
}, 150);
} else {
$j('.qode_search_form').stop().animate({height:"0"},150);
$j('.header_top_bottom_holder').stop().animate({top:"0px"},150);
$j('.content_inner').stop().animate({marginTop:"0"},150);
if($scroll < 34){ $j('header.page_header').stop().animate({top:-$scroll},150);}
$j('.title.has_fixed_background').animate({
'background-position-y': (yPos - 50)+'px'
}, 150);
}
$j(window).scroll(function() {
if ($j('.qode_search_form').height() != "0" && $scroll > 50) {
$j('.qode_search_form').stop().animate({height:"0"},150);
$j('.header_top_bottom_holder').stop().animate({top:"0px"},150);
$j('.content_inner').stop().animate({marginTop:"0"},150);
$j('.title.has_fixed_background').css('backgroundPosition', 'center '+(yPos)+'px');
}
});
$j('.qode_search_close').click(function(e){
e.preventDefault();
$j('.qode_search_form').stop().animate({height:"0"},150);
$j('.content_inner').stop().animate({marginTop:"0"},150);
$j('.header_top_bottom_holder').stop().animate({top:"0px"},150);
if($scroll < 34){ $j('header.page_header').stop().animate({top:-$scroll},150);}
$j('.title.has_fixed_background').animate({
'background-position-y': (yPos)+'px'
}, 150);
});
}
});
}
//search type - search_slides_from_header_bottom
if($j('.search_slides_from_header_bottom').length){
$j('.search_slides_from_header_bottom').click(function(e){
e.preventDefault();
if($j('html').hasClass('touch')){
if ($j('.qode_search_form_2').height() == "0") {
$j('.qode_search_form_2 input[type="text"]').onfocus = function () {
window.scrollTo(0, 0);
document.body.scrollTop = 0;
};
$j('.qode_search_form_2 input[type="text"]').onclick = function () {
window.scrollTo(0, 0);
document.body.scrollTop = 0;
};
$j('.qode_search_form_2').css('height','50px');
} else {
$j('.qode_search_form_2').css('height','0');
}
$j(window).scroll(function() {
if ($j('.qode_search_form_2').height() != "0" && $scroll > 50) {
$j('.qode_search_form_2').css('height','0');
}
});
} else {
if($j('.qode_search_form_2').hasClass('animated')) {
$j('.qode_search_form_2').removeClass('animated');
$j('.qode_search_form_2').css('bottom','0');
} else {
$j('.qode_search_form input[type="text"]').focus();
$j('.qode_search_form_2').addClass('animated');
var search_form_height = $j('.qode_search_form_2').height();
$j('.qode_search_form_2').css('bottom',-search_form_height);
}
$j('.qode_search_form_2').addClass('disabled');
$j('.qode_search_form_2 input[type="submit"]').attr('disabled','disabled');
if(($j('.qode_search_form_2 .qode_search_field').val() !== '') && ($j('.qode_search_form_2 .qode_search_field').val() !== ' ')) {
$j('.qode_search_form_2 input[type="submit"]').removeAttr('disabled');
$j('.qode_search_form_2').removeClass('disabled');
}
else {
$j('.qode_search_form_2').addClass('disabled');
$j('.qode_search_form_2 input[type="submit"]').attr('disabled','disabled');
}
$j('.qode_search_form_2 .qode_search_field').keyup(function() {
if(($j(this).val() !== '') && ($j(this).val() != ' ')) {
$j('.qode_search_form_2 input[type="submit"]').removeAttr('disabled');
$j('.qode_search_form_2').removeClass('disabled');
}
else {
$j('.qode_search_form_2 input[type="submit"]').attr('disabled','disabled');
$j('.qode_search_form_2').addClass('disabled');
}
});
$j('.content, footer').click(function(e){
e.preventDefault();
$j('.qode_search_form_2').removeClass('animated');
$j('.qode_search_form_2').css('bottom','0');
});
}
});
}
//search type - search covers header
if($j('.search_covers_header').length){
$j('.search_covers_header').click(function(e){
e.preventDefault();
if($j(".search_covers_only_bottom").length){
var headerHeight = $j('.header_bottom').height();
}
else{
if($j(".fixed_top_header").length){
var headerHeight = $j('.top_header').height();
}else{
var headerHeight = $j('.header_top_bottom_holder').height();
}
}
$j('.qode_search_form_3 .form_holder_outer').height(headerHeight);
if($j(".search_covers_only_bottom").length){
$j('.qode_search_form_3').css('bottom',0);
$j('.qode_search_form_3').css('top','auto');
}
$j('.qode_search_form_3').stop(true).fadeIn(600,'easeOutExpo');
$j('.qode_search_form_3 input[type="text"]').focus();
$j(window).scroll(function() {
if($j(".search_covers_only_bottom").length){
var headerHeight = $j('.header_bottom').height();
}
else{
if($j(".fixed_top_header").length){
var headerHeight = $j('.top_header').height();
}else{
var headerHeight = $j('.header_top_bottom_holder').height();
}
}
$j('.qode_search_form_3 .form_holder_outer').height(headerHeight);
});
$j('.qode_search_close, .content, footer').click(function(e){
e.preventDefault();
$j('.qode_search_form_3').stop(true).fadeOut(450,'easeOutExpo');
});
$j('.qode_search_form_3').blur(function(e){
$j('.qode_search_form_3').stop(true).fadeOut(450,'easeOutExpo');
});
});
}
//search type - fullscreen search
if($j('.fullscreen_search').length){
//search type Circle Appear
if($j(".fullscreen_search_holder.from_circle").length){
$j('.fullscreen_search').on('click',function(e){
e.preventDefault();
if($j('.fullscreen_search_overlay').hasClass('animate')){
$j('.fullscreen_search_overlay').removeClass('animate');
$j('.fullscreen_search_holder').css('opacity','0');
$j('.fullscreen_search_close').css('opacity','0');
$j('.fullscreen_search_close').css('visibility','hidden');
$j('.fullscreen_search').css('opacity','1');
$j('.fullscreen_search_holder').css('display','none');
} else {
$j('.fullscreen_search_overlay').addClass('animate');
$j('.fullscreen_search_holder').css('display','block');
setTimeout(function(){
$j('.fullscreen_search_holder').css('opacity','1');
$j('.fullscreen_search_close').css('opacity','1');
$j('.fullscreen_search_close').css('visibility','visible');
$j('.fullscreen_search').css('opacity','0');
},200);
}
});
$j('.fullscreen_search_close').on('click',function(e){
e.preventDefault();
$j('.fullscreen_search_overlay').removeClass('animate');
$j('.fullscreen_search_holder').css('opacity','0');
$j('.fullscreen_search_close').css('opacity','0');
$j('.fullscreen_search_close').css('visibility','hidden');
$j('.fullscreen_search').css('opacity','1');
$j('.fullscreen_search_holder').css('display','none');
});
}
//search type Fade Appear
if($j(".fullscreen_search_holder.fade").length){
$j('.fullscreen_search').on('click',function(e){
e.preventDefault();
if($j('.fullscreen_search_holder').hasClass('animate')) {
$j('body').removeClass('fullscreen_search_opened');
$j('.fullscreen_search_holder').removeClass('animate');
$j('body').removeClass('search_fade_out');
$j('body').removeClass('search_fade_in');
} else {
$j('body').addClass('fullscreen_search_opened');
$j('body').removeClass('search_fade_out');
$j('body').addClass('search_fade_in');
$j('.fullscreen_search_holder').addClass('animate');
}
});
$j('.fullscreen_search_close').on('click',function(e){
e.preventDefault();
$j('body').removeClass('fullscreen_search_opened');
$j('.fullscreen_search_holder').removeClass('animate');
$j('body').removeClass('search_fade_in');
$j('body').addClass('search_fade_out');
});
}
//Text input focus change
$j('.fullscreen_search_holder .search_field').focus(function(){
$j('.fullscreen_search_holder .field_holder .line').css("width","100%");
});
$j('.fullscreen_search_holder .search_field').blur(function(){
$j('.fullscreen_search_holder .field_holder .line').css("width","0");
});
//search close button - setting its position vertically
$j(window).scroll(function() {
var bottom_height = $j(".page_header .header_bottom").height();
if($j(".page_header").hasClass("sticky")){
$j(".fullscreen_search_holder .side_menu_button").css("height",bottom_height);
$j(".fullscreen_search_holder .close_container").css("top","0");
} else if($j(".page_header").hasClass("fixed")){
$j(".fullscreen_search_holder .side_menu_button").css("height",bottom_height);
} else {
$j(".fullscreen_search_holder .side_menu_button").css("height","");
$j(".fullscreen_search_holder .close_container").css("top","");
}
});
}
if($j('.qode_search_submit').length) {
$j('.qode_search_submit').click(function(e) {
e.preventDefault();
e.stopPropagation();
var searchForm = $j(this).parents('form').first();
searchForm.submit();
});
}
}
/*
** Init update Shopping Cart
*/
function updateShoppingCart(){
"use strict";
$j('body').bind('added_to_cart', add_to_cart);
function add_to_cart(event, parts, hash) {
var miniCart = $j('.shopping_cart_header');
if ( parts['div.widget_shopping_cart_content'] ) {
var $cartContent = jQuery(parts['div.widget_shopping_cart_content']),
$itemsList = $cartContent .find('.cart_list'),
$total = $cartContent.find('.total').contents(':not(strong)').text();
miniCart.find('.shopping_cart_dropdown_inner').html('').append($itemsList);
miniCart.find('.total span').html('').append($total);
}
}
}
/*
** Set content bottom margin because of the uncovering footer
*/
function setContentBottomMargin(){
if($j('.uncover').length){
$j('.content').css('margin-bottom', $j('footer').height());
}
}
/*
** Set footer uncover with vertical area
*/
function footerWidth(){
"use strict";
if($j('.uncover').length && $j('body').hasClass('vertical_menu_enabled') && $window_width > 1000){
$j('.uncover').width($window_width - $j('.vertical_menu_area').width());
} else{
$j('.uncover').css('width','100%');
}
}
/*
** Boxes which reveal text on hover
*/
function initCoverBoxes(){
if($j('.cover_boxes').length) {
$j('.cover_boxes').each(function(){
var active_element = 0;
var data_active_element = 1;
if(typeof $j(this).data('active-element') !== 'undefined' && $j(this).data('active-element') !== false) {
data_active_element = parseFloat($j(this).data('active-element'));
active_element = data_active_element - 1;
}
var number_of_columns = 3;
//validate active element
active_element = data_active_element > number_of_columns ? 0 : active_element;
$j(this).find('li').eq(active_element).addClass('act');
var cover_boxed = $j(this);
$j(this).find('li').each(function(){
$j(this).hover(function() {
$j(cover_boxed).find('li').removeClass('act');
$j(this).addClass('act');
});
});
});
}
}
/*
** Create content menu from selected rows
*/
function createContentMenu(){
"use strict";
var content_menu = $j(".content_menu");
content_menu.each(function(){
if($j(this).find('ul').length === 0){
if($j(this).css('background-color') !== ""){
var background_color = $j(this).css('background-color');
}
var content_menu_ul = $j("
");
content_menu_ul.appendTo($j(this));
var sections = $j(this).siblings('.in_content_menu');
if(sections.length){
sections.each(function(){
var section_href = $j(this).data("q_id");
var section_title = $j(this).data('q_title');
var section_icon = $j(this).data('q_icon');
var li = $j("");
var icon = $j("", {"class": 'fa '+section_icon});
var link = $j("", {"href": section_href, "html": "" + section_title + ""});
var arrow;
if(background_color !== ""){
arrow = $j("", {"class": 'arrow', "style": 'border-color: '+background_color+' transparent transparent transparent'});
} else {
arrow = $j("", {"class": 'arrow'});
}
icon.prependTo(link);
link.appendTo(li);
arrow.appendTo(li);
li.appendTo(content_menu_ul);
});
}
}
});
}
/*
** Create content menu (select menu for responsiveness)from selected rows
*/
function createSelectContentMenu(){
"use strict";
var content_menu = $j(".content_menu");
content_menu.each(function(){
var $this = $j(this);
var $menu_select = $j("
");
$menu_select.appendTo($j(this).find('.nav_select_menu'));
$j(this).find("ul.menu li a").each(function(){
var menu_url = $j(this).attr("href");
var menu_text = $j(this).text();
var menu_icon = $j(this).find('i').clone();
if ($j(this).parents("li").length === 2) { menu_text = " " + menu_text; }
if ($j(this).parents("li").length === 3) { menu_text = " " + menu_text; }
if ($j(this).parents("li").length > 3) { menu_text = " " + menu_text; }
var li = $j("");
var link = $j("", {"href": menu_url, "html": menu_text});
menu_icon.prependTo(link);
link.appendTo(li);
li.appendTo($menu_select);
});
$this.find(".nav_select_button").on('click', function() {
if ($this.find('.nav_select_menu ul').is(":visible")){
$this.find('.nav_select_menu ul').slideUp();
} else {
$this.find('.nav_select_menu ul').slideDown();
}
return false;
});
$this.find(".nav_select_menu ul li a").on('click',function () {
$this.find('.nav_select_menu ul').slideUp();
var $link = $j(this);
var $target = $link.attr("href");
var targetOffset = $j("div.wpb_row[data-q_id='" + $target + "'],section.parallax_section_holder[data-q_id='" + $target + "']").offset().top;
$j('html,body').stop().animate({scrollTop: targetOffset }, 500, 'swing', function(){
$j('nav.content_menu ul li').removeClass('active');
$link.parent().addClass('active');
});
return false;
});
});
}
/*
** Calculate content menu position and fix it when needed
*/
function contentMenuPosition(){
"use strict";
if($j('nav.content_menu').length){
if(content_menu_position > sticky_amount){
var x = min_header_height_sticky;
}else{
var x = 0;
}
if(content_menu_position - x - content_menu_top_add - $scroll <= 0 && ($j('header').hasClass('stick') || $j('header').hasClass('stick_with_left_right_menu'))){
if(content_menu_position < sticky_amount){
if($scroll > sticky_amount){
$j('nav.content_menu').css({'position': 'fixed', 'top': min_header_height_sticky + content_menu_top_add}).addClass('fixed');
}else{
$j('nav.content_menu').css({'position': 'fixed', 'top': 0, transition:'none'}).addClass('fixed');
}
}else{
$j('nav.content_menu').css({'position': 'fixed', 'top': min_header_height_sticky + content_menu_top_add}).addClass('fixed');
}
$j('header.sticky').addClass('no_shadow');
$j('.content > .content_inner > .container > .container_inner').css('margin-top',content_line_height);
$j('.content > .content_inner > .full_width').css('margin-top',content_line_height);
} else if(content_menu_position - content_menu_top - content_menu_top_add - $scroll <= 0 && !($j('header').hasClass('stick'))) {
$j('nav.content_menu').css({'position': 'fixed', 'top': content_menu_top + content_menu_top_add}).addClass('fixed');
$j('.content > .content_inner > .container > .container_inner').css('margin-top',content_line_height);
$j('.content > .content_inner > .full_width').css('margin-top',content_line_height);
} else {
$j('nav.content_menu').css({'position': 'relative', 'top': '0px'}).removeClass('fixed');
$j('header.sticky').removeClass('no_shadow');
$j('.content > .content_inner > .container > .container_inner').css('margin-top','0px');
$j('.content > .content_inner > .full_width').css('margin-top','0px');
}
$j('.content .in_content_menu').waypoint( function(direction) {
var $active = $j(this);
var id = $active.data("q_id");
$j("nav.content_menu.fixed li a").each(function(){
var i = $j(this).attr("href");
if(i === id){
$j(this).parent().addClass('active');
}else{
$j(this).parent().removeClass('active');
}
});
}, { offset: '150' });
}
}
/*
** Check first and last content menu included rows for active state in content menu
*/
function contentMenuCheckLastSection(){
"use strict";
if($j('nav.content_menu').length){
if($j('.content .in_content_menu').length){
var last_from_top = $j('.content .in_content_menu:last').offset().top + $j('.content .in_content_menu:last').height();
var first_from_top = $j('.content .in_content_menu:first').offset().top - content_menu_top - content_menu_top_add - 100; //60 is height of content menu
if(last_from_top < $scroll){
$j("nav.content_menu.fixed li").removeClass('active');
}
if(first_from_top > $scroll){
$j('nav.content_menu li:first, nav.content_menu ul.menu li:first').removeClass('active');
}
}
}
}
/*
** Scroll to section when item in content menu is clicked
*/
function contentMenuScrollTo(){
"use strict";
if($j('nav.content_menu').length){
$j("nav.content_menu ul.menu li a").on('click', function(e){
e.preventDefault();
var $this = $j(this);
if($j(this).parent().hasClass('active')){
return false;
}
var $target = $this.attr("href");
var targetOffset = $j("div.wpb_row[data-q_id='" + $target + "'],section.parallax_section_holder[data-q_id='" + $target + "']").offset().top - content_line_height - content_menu_top - content_menu_top_add;
$j('html,body').stop().animate({scrollTop: targetOffset }, 500, 'swing', function(){
$j('nav.content_menu ul li').removeClass('active');
$this.parent().addClass('active');
});
return false;
});
}
}
function initButtonHover() {
if($j('.qbutton').length) {
$j('.qbutton').each(function() {
//hover background color
if(typeof $j(this).data('hover-background-color') !== 'undefined' && $j(this).data('hover-background-color') !== false) {
var hover_background_color = $j(this).data('hover-background-color');
var initial_background_color = $j(this).css('background-color');
$j(this).hover(
function() {
$j(this).css('background-color', hover_background_color);
},
function() {
$j(this).css('background-color', initial_background_color);
});
}
//hover border color
if(typeof $j(this).data('hover-border-color') !== 'undefined' && $j(this).data('hover-border-color') !== false) {
var hover_border_color = $j(this).data('hover-border-color');
var initial_border_color = $j(this).css('border-top-color');
$j(this).hover(
function() {
$j(this).css('border-color', hover_border_color);
},
function() {
$j(this).css('border-color', initial_border_color);
});
}
//hover color
if(typeof $j(this).data('hover-color') !== 'undefined' && $j(this).data('hover-color') !== false) {
var hover_color = $j(this).data('hover-color');
var initial_color = $j(this).css('color');
$j(this).hover(
function() {
$j(this).css('color', hover_color);
},
function() {
$j(this).css('color', initial_color);
});
}
});
}
}
function initSocialIconHover() {
if($j('.q_social_icon_holder').length) {
$j('.q_social_icon_holder').each(function() {
//hover background color
if(typeof $j(this).data('hover-background-color') !== 'undefined' && $j(this).data('hover-background-color') !== false) {
var hover_background_color = $j(this).data('hover-background-color');
var initial_background_color = $j(this).find('.fa-stack').css('background-color');
$j(this).find('.fa-stack').hover(
function() {
$j(this).css('background-color', hover_background_color);
},
function() {
$j(this).css('background-color', initial_background_color);
});
}
//hover border color
if(typeof $j(this).data('hover-border-color') !== 'undefined' && $j(this).data('hover-border-color') !== false) {
var hover_border_color = $j(this).data('hover-border-color');
var initial_border_color = $j(this).find('.fa-stack').css('border-top-color');
$j(this).find('.fa-stack').hover(
function() {
$j(this).css('border-color', hover_border_color);
},
function() {
$j(this).css('border-color', initial_border_color);
}
);
}
//hover color
if(typeof $j(this).data('hover-color') !== 'undefined' && $j(this).data('hover-color') !== false) {
var initial_color;
var initial_style;
var hover_color = $j(this).data('hover-color');
if($j(this).find('.fa-stack i, .fa-stack span').length) {
initial_color = $j(this).find('.fa-stack i, .fa-stack span').css('color');
initial_style = $j(this).find('.fa-stack i, .fa-stack span').attr('style');
} else if($j(this).find('.simple_social').length) {
initial_color = $j(this).find('.simple_social').css('color');
initial_style = $j(this).find('.simple_social').attr('style');
}
if($j(this).find('.fa-stack').length) {
$j(this).find('.fa-stack').hover(
function() {
$j(this).find('i, span').attr('style', function(i, s) { return initial_style + 'color: '+ hover_color + '!important;'});
},
function() {
$j(this).find('i, span').attr('style', function(i, s) { return initial_style + 'color: ' + initial_color + '!important;' });
});
} else if($j(this).find('.simple_social').length) {
$j(this).find('.simple_social').hover(
function(){
$j(this).attr('style', function(i, s) { return initial_style + 'color: '+ hover_color + '!important;' });
},
function(){
$j(this).attr('style', function(i, s) { return initial_style + 'color: '+ initial_color + '!important;' });
});
}
}
});
}
}
function initTabsActiveBorder() {
if($j('.q_tabs.vertical, .q_tabs.boxed').length) {
$j('.q_tabs.vertical, .q_tabs.boxed').each(function(){
var parentBgColor = getParentBackgroundColor($j(this));
var activeElement = $j(this).find('li.active a');
if($j(this).hasClass('boxed')) {
activeElement.css('border-bottom-color', parentBgColor);
}
if($j(this).hasClass('left')) {
activeElement.css('border-right-color', parentBgColor);
}
if($j(this).hasClass('right')) {
activeElement.css('border-left-color', parentBgColor);
}
});
}
}
function getParentBackgroundColor(element) {
return element.parents().filter(function(){
var color = $j(this).css('background-color');
return color != 'transparent' && color != 'rgba(0, 0, 0, 0)';
}).eq(0).css('background-color')
}
function setActiveTabBorder() {
if($j('.q_tabs li.active').length) {
$j(this).click(function() {
initTabsActiveBorder();
});
}
}
/*
** Popup menu initialization
*/
function initPopupMenu(){
"use strict";
if($j('a.popup_menu').length){
//var body_top;
//set height of popup holder and initialize nicescroll
$j(".popup_menu_holder_outer").height($window_height).niceScroll({
scrollspeed: 30,
mousescrollstep: 20,
cursorwidth: 0,
cursorborder: 0,
cursorborderradius: 0,
cursorcolor: "transparent",
autohidemode: false,
horizrailenabled: false
}); //200 is top and bottom padding of holder
//set height of popup holder on resize
$j(window).resize(function() {$j(".popup_menu_holder_outer").height($window_height)});
// Open popup menu
$j('a.popup_menu').on('click',function(e){
e.preventDefault();
if(!$j(this).hasClass('opened')){
$j(this).addClass('opened');
$j('body').addClass('popup_menu_opened');
setTimeout(function(){
if(!$j('body').hasClass('page-template-full_screen-php')){
$j('body').css('overflow','hidden');
}
},400);
}else{
$j(this).removeClass('opened');
$j('body').removeClass('popup_menu_opened');
setTimeout(function(){
if(!$j('body').hasClass('page-template-full_screen-php')){
$j('body').css('overflow','visible');
}
$j("nav.popup_menu ul.sub_menu").slideUp(200, function(){
$j('nav.popup_menu').getNiceScroll().resize();
});
},400);
}
});
//logic for open sub menus in popup menu
$j(".popup_menu > ul > li.has_sub > a, .popup_menu > ul > li.has_sub > h6").on('tap click', function (e) {
e.preventDefault();
if ($j(this).closest('li.has_sub').find("> ul.sub_menu").is(":visible")){
$j(this).closest('li.has_sub').find("> ul.sub_menu").slideUp(200, function(){
$j('.popup_menu_holder_outer').getNiceScroll().resize();
});
$j(this).closest('li.has_sub').removeClass('open_sub');
} else {
$j(this).closest('li.has_sub').addClass('open_sub');
$j(this).closest('li.has_sub').find("> ul.sub_menu").slideDown(200, function(){
$j('.popup_menu_holder_outer').getNiceScroll().resize();
});
}
return false;
});
// $j(".popup_menu > ul > li.has_sub > ul.sub_menu > li.has_sub > a > span.popup_arrow, .popup_menu > ul > li.has_sub > ul.sub_menu > li.has_sub > h6").click(function () {
// if ($j(this).parent().parent().find("ul.sub_menu").is(":visible")){
// $j(this).parent().parent().find("ul.sub_menu").slideUp(200);
// $j(this).parent().parent().removeClass('open_sub');
// } else {
// $j(this).parent().parent().addClass('open_sub');
// $j(this).parent().parent().find("ul.sub_menu").slideDown(200);
// }
// });
//if link has no submenu and if it's not dead, than open that link
$j(".popup_menu ul li:not(.has_sub) a").click(function () {
if(($j(this).attr('href') !== "http://#") && ($j(this).attr('href') !== "#")){
$j('a.popup_menu').removeClass('opened');
$j('body').removeClass('popup_menu_opened').css('overflow','visible');
$j("nav.popup_menu ul.sub_menu").slideUp(200, function(){
$j('nav.popup_menu').getNiceScroll().resize();
});
}else{
return false;
}
});
}
}
function initFullScreenTemplate(){
"use strict";
if($j('.full_screen_holder').length && $window_width > 600){
// used for header style on changing sections, in checkFullScreenSectionsForHeaderStyle functions - START //
var default_header_style = '';
if ($j('header.page_header').hasClass('light')) {
default_header_style = 'light';
} else if ($j('header.page_header').hasClass('dark')) {
default_header_style = 'dark';
} else {
default_header_style = header_style_admin;
}
// used for header style on changing sections, in checkFullScreenSectionsForHeaderStyle functions - END //
$j('.full_screen_preloader').css('height', ($window_height));
$j('#up_fs_button').on('click', function() {
$j.fn.fullpage.moveSectionUp();
return false;
});
$j('#down_fs_button').on('click', function() {
$j.fn.fullpage.moveSectionDown();
return false;
});
var section_number = $j('.full_screen_inner > .full_screen_section').length;
$j('.full_screen_inner').fullpage({
sectionSelector: '.full_screen_section',
scrollOverflow: true,
afterLoad: function(anchorLink, index){
checkActiveArrowsOnFullScrrenTemplate(section_number, index);
checkFullScreenSectionsForHeaderStyle(index, default_header_style);
},
afterRender: function(){
checkActiveArrowsOnFullScrrenTemplate(section_number, 1);
checkFullScreenSectionsForHeaderStyle(1, default_header_style);
if(section_number !== 1){
$j('.full_screen_holder').find('.full_screen_navigation_holder').css('visibility','visible');
}
$j('.full_screen_holder').find('.full_screen_inner').css('visibility','visible');
$j('.full_screen_preloader').hide();
if($j('.full_screen_holder video.full_screen_sections_video').length){
$j('.full_screen_holder video.full_screen_sections_video').each(function(){
$j(this).get(0).play();
});
}
}
});
}
}
function checkActiveArrowsOnFullScrrenTemplate(section_number, index){
"use strict";
if(index === 1){
$j('.full_screen_navigation_holder #up_fs_button').hide();
if(index != section_number){
$j('.full_screen_navigation_holder #down_fs_button').show();
}
}else if(index === section_number){
if(section_number === 2){
$j('.full_screen_navigation_holder #up_fs_button').show();
}
$j('.full_screen_navigation_holder #down_fs_button').hide();
}else{
$j('.full_screen_navigation_holder #up_fs_button').show();
$j('.full_screen_navigation_holder #down_fs_button').show();
}
}
function checkFullScreenSectionsForHeaderStyle(index, default_header_style){
"use strict";
if($j('[data-q_header_style]').length > 0 && $j('header').hasClass('header_style_on_scroll')) {
if ($j($j('.full_screen_holder .full_screen_inner .full_screen_section')[index-1]).data("q_header_style") !== undefined) {
var header_style = $j($j('.full_screen_holder .full_screen_inner .full_screen_section')[index-1]).data("q_header_style");
$j('header').removeClass('dark light').addClass(header_style);
} else {
$j('header').removeClass('dark light').addClass(default_header_style);
}
}
}
/*
* Check header style on scroll
*/
function checkHeaderStyleOnScroll(){
"use strict";
if($j('[data-q_header_style]').length > 0 && $j('header').hasClass('header_style_on_scroll')){
//var offset = $j('header.page_header').height();
var default_header_style = '';
if($j('header.page_header').hasClass('light')){
default_header_style = 'light';
}else if($j('header.page_header').hasClass('dark')){
default_header_style = 'dark';
}else{
default_header_style = header_style_admin;
}
var paspartu_top_add = $j('body').hasClass('paspartu_on_top_fixed') ? Math.round($window_width*paspartu_width) : 0;
var paspartu_bottom_add = $j('body').hasClass('paspartu_on_bottom_fixed') ? Math.round($window_width*paspartu_width) : 0;
$j('.full_width_inner > .wpb_row.section, .full_width_inner > .parallax_section_holder, .container_inner > .wpb_row.section, .container_inner > .parallax_section_holder, .portfolio_single > .wpb_row.section').waypoint( function(direction) {
if(direction === 'down') {
if ($j(this).data("q_header_style") !== undefined) {
var header_style = $j(this).data("q_header_style");
$j('header').removeClass('dark light').addClass(header_style);
} else {
$j('header').removeClass('dark light').addClass(default_header_style);
}
}
}, { offset: 0 + paspartu_top_add});
//'title' class is added in selector because default header style is not set when there is title on the page and page is scrolled back to the top
$j('.title, .full_width_inner > .wpb_row.section, .full_width_inner > .parallax_section_holder, .container_inner > .wpb_row.section, .container_inner > .parallax_section_holder, .portfolio_single > .wpb_row.section, .q_slider').waypoint( function(direction) {
if(direction === 'up') {
if ($j(this).data("q_header_style") !== undefined) {
var header_style = $j(this).data("q_header_style");
$j('header').removeClass('dark light').addClass(header_style);
} else {
$j('header').removeClass('dark light').addClass(default_header_style);
}
}
}, { offset: function(){
return -$j(this).outerHeight() + paspartu_bottom_add;
} });
}
}
/*
** Image Gallery Slider with no space initialization
*/
function initImageGallerySliderNoSpace(){
if($j('.qode_image_gallery_no_space').length){
$j('.qode_image_gallery_no_space').each(function(){
$j(this).animate({'opacity': 1},1000);
$j(this).find('.qode_image_gallery_holder').lemmonSlider({infinite: true});
});
//disable click on non active image
$j('.qode_image_gallery_no_space').on('click', 'li:not(.active) a', function() {
return false;
});
}
}
/*
** Vertical Split Slider
*/
function initVerticalSplitSlider(){
"use strict";
if($j('html').hasClass('vertical_split_screen_initalized')){
$j('html').removeClass('vertical_split_screen_initalized');
$j.fn.multiscroll.destroy();
}
if($j('.vertical_split_slider').length) {
$j('.vertical_split_slider').height($window_height).animate({opacity:1},300);
$j('.vertical_split_slider').multiscroll({
scrollingSpeed: 500,
navigation: true,
afterRender: function(){
$j('html').addClass('vertical_split_screen_initalized');
initButtonHover(); // this function need to be initialized after initVerticalSplitSlider
if($j('div.wpcf7 > form').length){$j('div.wpcf7 > form').wpcf7InitForm();} // this function need to be initialized after initVerticalSplitSlider in order to initialize
initCountdown();
if ($j('body').hasClass('vss_responsive_adv')){
//prepare html for smaller screens - start //
var vertical_split_slider_responsive = $j("");
$j(".vertical_split_slider").after(vertical_split_slider_responsive);
var left_side = $j('.vertical_split_slider .ms-left > div');
var right_side = $j('.vertical_split_slider .ms-right > div');
for(var i = 0; i < left_side.length; i++){
vertical_split_slider_responsive.append($j(left_side[i]).clone(true));
vertical_split_slider_responsive.append($j(right_side[left_side.length-1-i]).clone(true));
}
}
}
});
if ($j('body').hasClass('vss_responsive_adv')){
if($window_width < 768){
$j.fn.multiscroll.destroy();
$j('html,body').css('height', 'auto').css('overflow', 'auto');
}else{
$j.fn.multiscroll.build();
$j('html,body').css('height', '100%').css('overflow', 'hidden');
}
$j(window).resize(function() {
if($window_width < 768){
$j.fn.multiscroll.destroy();
$j('html,body').css('height', 'auto').css('overflow', 'auto');
}else{
$j.fn.multiscroll.build();
$j('html,body').css('height', '100%').css('overflow', 'hidden');
}
});
}
}else{
if(!$j('.full_screen_holder').length) { //because this is not necessary on pages if there are full screen sections
$j('html,body').css('height', 'auto').css('overflow', 'auto');
}
}
}
/*
** Show Google Map
*/
function showGoogleMap(){
"use strict";
if($j('.qode_google_map').length){
$j('.qode_google_map').each(function(){
var custom_map_style;
if(typeof $j(this).data('custom-map-style') !== 'undefined') {
custom_map_style = $j(this).data('custom-map-style');
}
var color_overlay;
if(typeof $j(this).data('color-overlay') !== 'undefined' && $j(this).data('color-overlay') !== false) {
color_overlay = $j(this).data('color-overlay');
}
var saturation;
if(typeof $j(this).data('saturation') !== 'undefined' && $j(this).data('saturation') !== false) {
saturation = $j(this).data('saturation');
}
var lightness;
if(typeof $j(this).data('lightness') !== 'undefined' && $j(this).data('lightness') !== false) {
lightness = $j(this).data('lightness');
}
var zoom;
if(typeof $j(this).data('zoom') !== 'undefined' && $j(this).data('zoom') !== false) {
zoom = $j(this).data('zoom');
}
var pin;
if(typeof $j(this).data('pin') !== 'undefined' && $j(this).data('pin') !== false) {
pin = $j(this).data('pin');
}
var map_height;
if(typeof $j(this).data('map-height') !== 'undefined' && $j(this).data('map-height') !== false) {
map_height = $j(this).data('map-height');
}
var unique_id;
if(typeof $j(this).data('unique-id') !== 'undefined' && $j(this).data('unique-id') !== false) {
unique_id = $j(this).data('unique-id');
}
var google_maps_scroll_wheel;
if(typeof $j(this).data('google-maps-scroll-wheel') !== 'undefined') {
google_maps_scroll_wheel = $j(this).data('google-maps-scroll-wheel');
}
var addresses;
if(typeof $j(this).data('addresses') !== 'undefined' && $j(this).data('addresses') !== false) {
addresses = $j(this).data('addresses');
}
var map = "map_"+ unique_id;
var geocoder = "geocoder_"+ unique_id;
var holderId = "map_canvas_"+ unique_id;
initializeGoogleMap(custom_map_style, color_overlay, saturation, lightness, google_maps_scroll_wheel, zoom, holderId, map_height, pin, map, geocoder, addresses)
});
}
}
/*
** Init Google Map
*/
function initializeGoogleMap(custom_map_style, color, saturation, lightness, wheel, zoom, holderId, height, pin, map, geocoder, data){
"use strict";
var mapStyles = [
{
stylers: [
{hue: color },
{saturation: saturation},
{lightness: lightness},
{gamma: 1}
]
}
];
var google_map_type_id;
if(custom_map_style){
google_map_type_id = 'qode_style'
} else {
google_map_type_id = google.maps.MapTypeId.ROADMAP
}
var qodeMapType = new google.maps.StyledMapType(mapStyles,
{name: "Qode Google Map"});
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(-34.397, 150.644);
var myOptions = {
zoom: zoom,
scrollwheel: wheel,
center: latlng,
zoomControl: true,
zoomControlOptions: {
style: google.maps.ZoomControlStyle.SMALL,
position: google.maps.ControlPosition.RIGHT_CENTER
},
scaleControl: false,
scaleControlOptions: {
position: google.maps.ControlPosition.LEFT_CENTER
},
streetViewControl: false,
streetViewControlOptions: {
position: google.maps.ControlPosition.LEFT_CENTER
},
panControl: false,
panControlOptions: {
position: google.maps.ControlPosition.LEFT_CENTER
},
mapTypeControl: false,
mapTypeControlOptions: {
mapTypeIds: [google.maps.MapTypeId.ROADMAP, 'qode_style'],
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_CENTER
},
mapTypeId: google_map_type_id
};
map = new google.maps.Map(document.getElementById(holderId), myOptions);
map.mapTypes.set('qode_style', qodeMapType);
var index;
for (index = 0; index < data.length; ++index) {
initializeGoogleAddress(data[index], pin, map, geocoder);
}
var holder_element = document.getElementById(holderId);
holder_element.style.height = height + "px";
}
/*
** Init Google Map Addresses
*/
function initializeGoogleAddress(data, pin, map, geocoder){
"use strict";
if (data === '')
return;
var contentString = '
'+
'
'+
'
'+
'
'+
'
'+data+'
'+
'
'+
'
';
var infowindow = new google.maps.InfoWindow({
content: contentString
});
geocoder.geocode( { 'address': data}, function(results, status) {
if (status === google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location,
icon: pin,
title: data['store_title']
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map,marker);
});
google.maps.event.addDomListener(window, 'resize', function() {
map.setCenter(results[0].geometry.location);
});
}
});
};
function checkSVG(element) {
"use strict";
var el = element.find('.active .qode_slide-svg-holder');
var drawing_enabled = el.data('svg-drawing');
if (drawing_enabled === 'yes') {
drawSVG(el);
}
}
/**
* Function for drawing slider svgs. Based on Codrops article 'SVG Drawing Animation'
*/
function drawSVG(svg){
"use strict";
var svgs = Array.prototype.slice.call( svg.find('svg') ),
svgArr = [],
resizeTimeout;
// the svgs already shown...
svgs.forEach( function( el, i ) {
var svg = new SVGEl( el );
svgArr[i] = svg;
setTimeout(function( el ) {
return function() {
svg.render();
};
}( el ), 0 );//0ms pause before drawing
} );
}
var docElem = window.document.documentElement;
window.requestAnimFrame = function(){
return (
window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(/* function */ callback){
window.setTimeout(callback, 1000 / 60);
}
);
}();
window.cancelAnimFrame = function(){
return (
window.cancelAnimationFrame ||
window.webkitCancelAnimationFrame ||
window.mozCancelAnimationFrame ||
window.oCancelAnimationFrame ||
window.msCancelAnimationFrame ||
function(id){
window.clearTimeout(id);
}
);
}();
function SVGEl( el ) {
this.el = el;
var frameRate = $j(this.el).closest('.qode_slide-svg-holder').data('svg-frames');
this.image = this.el.previousElementSibling;
this.current_frame = 0;
this.total_frames = frameRate;//number of frames defines speed of drawing
this.path = [];
this.length = [];
this.handle = 0;
this.init();
}
SVGEl.prototype.init = function() {
var self = this;
[].slice.call( this.el.querySelectorAll( 'path' ) ).forEach( function( path, i ) {
self.path[i] = path;
var l = self.path[i].getTotalLength();
self.length[i] = l;
self.path[i].style.strokeDasharray = l + ' ' + l;
self.path[i].style.strokeDashoffset = l;
} );
};
SVGEl.prototype.render = function() {
if( this.rendered ) return;
this.rendered = true;
this.draw();
};
SVGEl.prototype.draw = function() {
var self = this,
progress = this.current_frame/this.total_frames;
if (progress > 1) {
window.cancelAnimFrame(this.handle);
} else {
this.current_frame++;
for(var j=0, len = this.path.length; j 0) {
var skrollr_title = skrollr.init({
edgeStrategy: 'set',
smoothScrolling: false,
forceHeight: false
});
skrollr_title.refresh();
}
};
function initQodeElementAnimationSkrollr() {
"use strict";
if($j('.no-touch .carousel').length === 0) {
var elementItemAnimation = $j('.no-touch .q_elements_holder > .q_elements_item');
elementItemAnimation.each(function(){
if((typeof($j(this).data('animation')) !== 'undefined' || typeof($j('.title_outer').data('animation')) !== 'undefined') && $j(this).data('animation') === 'yes') {
var skr = skrollr.init();
skr.refresh();
return false;
}
});
}
};
function initIconShortcodeHover() {
"use strict";
if($j('.qode_icon_shortcode').length) {
$j('.qode_icon_shortcode').each(function() {
//check if icon type is circle of square
if(typeof $j(this).data('type') !== 'undefined' && ['circle', 'square'].indexOf($j(this).data('type')) != -1) {
if(typeof $j(this).data('hover-bg-color') !== 'undefined') {
if($j(this).data('type') == 'circle') {
var elementToHover = $j(this).find('i').first();
var hoverBgColor = $j(this).data('hover-bg-color');
var initialStyle = elementToHover.attr('style');
$j(this).hover(function() {
elementToHover.attr('style', initialStyle + 'color: ' + hoverBgColor + '!important');
}, function() {
elementToHover.attr('style', initialStyle);
});
} else {
var hoverBgColor = $j(this).data('hover-bg-color');
var initialBgColor = $j(this).css('background-color');
$j(this).hover(function() {
$j(this).css('background-color', hoverBgColor);
}, function() {
$j(this).css('background-color', initialBgColor);
});
}
}
}
if(typeof $j(this).data('hover-icon-color') !== 'undefined') {
var hoverColor = $j(this).data('hover-icon-color');
var initialColor = $j(this).find('.qode_icon_element ').css('color');
$j(this).hover(function() {
$j(this).find('.qode_icon_element ').css('color', hoverColor);
}, function() {
$j(this).find('.qode_icon_element ').css('color', initialColor);
});
}
});
}
}
function initIconWithTextHover() {
"use strict";
if($j('.qode_iwt_icon_holder').length) {
$j('.qode_iwt_icon_holder').each(function() {
if(typeof $j(this).data('icon-hover-bg-color') !== 'undefined') {
var hoverBgColor = $j(this).data('icon-hover-bg-color');
var initialBgColor = $j(this).css('background-color');
$j(this).hover(function() {
$j(this).css('background-color', hoverBgColor);
}, function() {
$j(this).css('background-color', initialBgColor);
});
}
if(typeof $j(this).data('icon-hover-color') !== 'undefined') {
var elementToChange = $j(this).find('.qode_iwt_icon_element');
var hoverColor = $j(this).data('icon-hover-color');
var initialColor = elementToChange.css('color');
$j(this).hover(function() {
elementToChange.css('color', hoverColor);
}, function() {
elementToChange.css('color', initialColor);
});
}
});
}
}
function initLoadNextPostOnBottom(){
"use strict";
if($j('.blog_vertical_loop').length) {
var header_addition;
var normal_header_addition;
var paspartu_add = $j('body').hasClass('paspartu_enabled') ? Math.round($window_width*paspartu_width) : 0;
if($j('header.page_header').hasClass('transparent')) {
normal_header_addition = 0;
}else{
normal_header_addition = header_height;
}
var click = true;
var $container = $j('.blog_vertical_loop .blog_holder');
$j(document).on('click','.blog_vertical_loop_button a',function(e){
e.preventDefault();
if(click){
click = false;
var $this = $j(this);
var link = $this.attr('href');
var $content = '.blog_vertical_loop .blog_holder';
var $anchor = '.blog_vertical_loop_button_holder a';
var $next_href = $j($anchor).attr('href');
//check for mobile header
if($window_width < 1000){
header_addition = $j('header.page_header').height();
}else{
header_addition = normal_header_addition;
}
var scrollTop = $j(window).scrollTop(),
elementOffset = $this.closest('article').offset().top,
distance = (elementOffset - scrollTop) - header_addition - paspartu_add;
$container.find('article:eq(1)').addClass('fade_out');
$this.closest('article').addClass('move_up').removeClass('next_post').css('transform', 'translateY(-' + distance + 'px)');
setTimeout(function () {
$j(window).scrollTop(0);
$container.find('article:eq(0)').remove();
$container.find('article:eq(0)').addClass('previous_post');
$this.closest('article').removeAttr('style').removeClass('move_up');
}, 450);
$j.get(link + '', function (data) {
var $new_content = $j(data).find('article').addClass('next_post');
$next_href = $j($anchor, data).attr('href');
$container.append($j($new_content));
click = true;
});
}
else{
return false;
}
});
$j(document).on('click','.blog_vertical_loop_back_button a',function(e){
e.preventDefault();
if(click){
click = false;
var $this = $j(this);
var link = $this.attr('href');
var $content = '.blog_vertical_loop .blog_holder';
var $anchor = '.blog_vertical_loop_button_holder.prev_post a';
var $prev_href = $j($anchor).attr('href');
$container.find('article:eq(0)').removeClass('fade_out').addClass('fade_in');
$this.closest('article').addClass('move_up').css('transform', 'translateY(' + $window_height + 'px)');
setTimeout(function () {
$container.find('article:last-child').remove();
$container.find('article:eq(0)').removeClass('previous_post fade_in');
$this.closest('article').addClass('next_post').removeAttr('style').removeClass('move_up');
$j.get(link + '', function (data) {
var $new_content = $j(data).find('article').removeClass('next_post').addClass('previous_post'); //by default, posts have next_post class
$prev_href = $j($anchor, data).attr('href');
$container.prepend($j($new_content));
click = true;
});
}, 450);
}else{
return false;
}
});
//load previous post on page load
$j.get($j('.blog_vertical_loop_button_holder .last_page a').attr('href') + '', function (data) {
var $new_content = $j(data).find('article').removeClass('next_post').addClass('previous_post'); //by default, posts have next_post class
$container.prepend($j($new_content));
});
//load next post on page load
$j.get($j('.blog_vertical_loop_button a').attr('href') + '', function (data) {
var $new_content = $j(data).find('article').addClass('next_post');
$container.append($j($new_content));
});
}
}
/*
Parallax Layers plugin
*/
(function ( $ ) {
"use strict";
$.fn.extend({
mouseParallax: function(options) {
var defaults = { moveFactor: 1.5, targetContainer: this };
var options = $.extend(defaults, options);
return this.each(function() {
var o = options;
var layer_elements = $(o.targetContainer).find('.image, .paralax_layers_content_holder');
layer_elements.each(function(i){
$(this).css('z-index',i);
});
var mouseXStart;
var mouseYStart;
mouseXStart = $(o.targetContainer).offset().left;
mouseYStart = $(o.targetContainer).offset().top;
$(o.targetContainer).on('mouseenter',function(e){
mouseXStart = e.pageX - $(this).offset().left;
mouseYStart = e.pageY - $(this).offset().top;
});
$(o.targetContainer).on('mousemove', function(e){
var mouseX0 = $(this).offset().left + mouseXStart;
var mouseY0 = $(this).offset().top + mouseYStart;
var mouseX = e.pageX - mouseX0;
var mouseY = e.pageY - mouseY0;
layer_elements.each(function(i){
$(this).css({
marginLeft : -mouseX / 100 * o.moveFactor*(i+1),
marginTop : -mouseY / 100 * o.moveFactor*(i+1)
},100);
});
});
var config = {
interval: 0,
over: function(){},
timeout: 500,
out: function(){
layer_elements.each(function(i){
$(this).stop().animate({
marginLeft: 0,
marginTop: 0
},300);
});
}
};
$(o.targetContainer).hoverIntent(config);
});
}
});
} (jQuery) );
/**
* Initialize parallax layers function
*/
function setParallaxLayersHeight($this, $def_height){
"use strict";
var parallax_layers_height = $def_height;
var responsive_breakpoint_set = [1600,1300,1000,768,567,320];
if($window_width > responsive_breakpoint_set[0]){
parallax_layers_height = $def_height;
}else if($window_width > responsive_breakpoint_set[1]){
parallax_layers_height = $def_height * 0.75;
}else if($window_width > responsive_breakpoint_set[2]){
parallax_layers_height = $def_height * 0.6;
}else if($window_width > responsive_breakpoint_set[3]){
parallax_layers_height = $def_height * 0.55;
}else if($window_width <= responsive_breakpoint_set[3]){
parallax_layers_height = $def_height * 0.45;
}
$this.css({'height': (parallax_layers_height) + 'px'});
}
function parallaxLayers(){
"use strict";
if($j('.qode_parallax_layers').length){
$j(".qode_parallax_layers").each(function(){
var $this = $j(this);
if($j(this).hasClass('full_screen_height')){
$this.height($window_height);
$j(window).resize(function () {
$this.height($window_height);
});
}else{
var $def_height = $j(this).data('height');
setParallaxLayersHeight($this, $def_height);
$j(window).resize(function () {
setParallaxLayersHeight($this, $def_height);
});
}
var $parallax_layers_holder = $this.find('.qode_parallax_layers_holder');
var counter = 0;
var limit = $this.find(".image").length;
$this.find(".image").each(function() {
var $this = $j(this);
if($this.css("background-image") != "" && $this.css("background-image") != "none") {
var bg_url = $this.attr('style');
bg_url = bg_url.match(/url\(["']?([^'")]+)['"]?\)/);
bg_url = bg_url ? bg_url[1] : "";
if (bg_url) {
var backImg = new Image();
backImg.src = bg_url;
$j(backImg).load(function(){
counter++;
if(counter == limit){
$parallax_layers_holder.removeClass('preload_parallax_layers');
if($j('html').hasClass('no-touch')){$parallax_layers_holder.mouseParallax()};
}
});
}
}
});
});
}
}
function alterWPMLSwitcherHeaderBottom() {
"use strict";
if($j('.header_bottom .main_menu li.menu-item-language').length) {
var langDropdown = $j('.header_bottom .main_menu .menu-item-language').find('.submenu-languages');
if(typeof langDropdown !== 'undefined') {
langDropdown.parent('li').addClass('narrow');
langDropdown.wrap('
');
langDropdown.show();
}
}
if($j('.header_bottom .mobile_menu li.menu-item-language').length) {
var langDropdown = $j('.header_bottom .mobile_menu .menu-item-language').find('.submenu-languages');
if(typeof langDropdown !== 'undefined') {
langDropdown.parent('li').addClass('has_sub');
langDropdown.prev('a').after('');
langDropdown.addClass('sub_menu');
}
}
}
================================================
FILE: core/docs/sources-asciidoc/src/main/asciidoc/stylesheets/telestax.css~
================================================
@import url(https://fonts.googleapis.com/css?family=Varela+Round|Open+Sans:400italic,600italic,400,600|Ubuntu+Mono:400);
/*! normalize.css v2.1.2 | MIT License | git.io/normalize */
/* ========================================================================== HTML5 display definitions ========================================================================== */
/** Correct `block` display not defined in IE 8/9. */
article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; }
/** Correct `inline-block` display not defined in IE 8/9. */
audio, canvas, video { display: inline-block; }
/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */
audio:not([controls]) { display: none; height: 0; }
/** Address `[hidden]` styling not present in IE 8/9. Hide the `template` element in IE, Safari, and Firefox < 22. */
[hidden], template { display: none; }
script { display: none !important; }
/* ========================================================================== Base ========================================================================== */
/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */
/** Remove default margin. */
body { margin: 0; }
/* ========================================================================== Links ========================================================================== */
/** Remove the gray background color from active links in IE 10. */
a { background: transparent; }
/** Address `outline` inconsistency between Chrome and other browsers. */
a:focus { outline: thin dotted; }
/** Improve readability when focused and also mouse hovered in all browsers. */
a:active, a:hover { outline: 0; }
/* ========================================================================== Typography ========================================================================== */
/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */
h1 { font-size: 2em; margin: 0.67em 0; }
/** Address styling not present in IE 8/9, Safari 5, and Chrome. */
abbr[title] { border-bottom: 1px dotted; }
/** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */
b, strong { font-weight: bold; }
/** Address styling not present in Safari 5 and Chrome. */
dfn { font-style: italic; }
/** Address differences between Firefox and other browsers. */
hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; }
/** Address styling not present in IE 8/9. */
mark { background: #ff0; color: #000; }
/** Correct font family set oddly in Safari 5 and Chrome. */
code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; }
/** Improve readability of pre-formatted text in all browsers. */
pre { white-space: pre-wrap; }
/** Set consistent quote types. */
q { quotes: "\201C" "\201D" "\2018" "\2019"; }
/** Address inconsistent and variable font size in all browsers. */
small { font-size: 80%; }
/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */
sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
sup { top: -0.5em; }
sub { bottom: -0.25em; }
/* ========================================================================== Embedded content ========================================================================== */
/** Remove border when inside `a` element in IE 8/9. */
img { border: 0; }
/** Correct overflow displayed oddly in IE 9. */
svg:not(:root) { overflow: hidden; }
/* ========================================================================== Figures ========================================================================== */
/** Address margin not present in IE 8/9 and Safari 5. */
figure { margin: 0; }
/* ========================================================================== Forms ========================================================================== */
/** Define consistent border, margin, and padding. */
fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
/** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */
legend { border: 0; /* 1 */ padding: 0; /* 2 */ }
/** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */
button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ }
/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */
button, input { line-height: normal; }
/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */
button, select { text-transform: none; }
/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */
button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ }
/** Re-set default cursor for disabled elements. */
button[disabled], html input[disabled] { cursor: default; }
/** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */
input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ }
/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */
input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; }
/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */
input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
/** Remove inner padding and border in Firefox 4+. */
button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
/** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */
textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ }
/* ========================================================================== Tables ========================================================================== */
/** Remove most spacing between table cells. */
table { border-collapse: collapse; border-spacing: 0; }
meta.foundation-mq-small { font-family: "only screen and (min-width: 768px)"; width: 768px; }
meta.foundation-mq-medium { font-family: "only screen and (min-width:1280px)"; width: 1280px; }
meta.foundation-mq-large { font-family: "only screen and (min-width:1440px)"; width: 1440px; }
*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
html, body { font-size: 100%; }
body { background: #fefdfd; color: rgba(0, 0, 0, 0.8); padding: 0; margin: 0; font-family: "Open Sans", sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; }
a:hover { cursor: pointer; }
img, object, embed { height: 100%; width: 100%; max-width: 100%; height: auto; }
object, embed { height: 100%; }
img { -ms-interpolation-mode: bicubic; }
#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; }
.left { float: left !important; }
.right { float: right !important; }
.text-left { text-align: left !important; }
.text-right { text-align: right !important; }
.text-center { text-align: center !important; }
.text-justify { text-align: justify !important; }
.hide { display: none; }
.antialiased, body { -webkit-font-smoothing: antialiased; }
img { display: inline-block; vertical-align: middle; }
textarea { height: auto; min-height: 50px; }
select { width: 100%; }
object, svg { display: inline-block; vertical-align: middle; }
.center { margin-left: auto; margin-right: auto; }
.spread { width: 100%; }
p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.21875em; line-height: 1.6; }
.subheader, .admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { line-height: 1.25; color: #002c5e; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; }
/* Typography resets */
div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; }
/* Default Link Styles */
a { color: #005580; text-decoration: underline; line-height: inherit; }
a:hover, a:focus { color: #078d71; }
a img { border: none; }
/* Default paragraph styles */
p { font-family: inherit; font-weight: normal; font-size: 1em; line-height: 1.5; margin-bottom: 1.25em; text-rendering: optimizeLegibility; }
p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; }
/* Default header styles */
h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: "Varela Round", sans-serif; font-weight: 400; font-style: normal; color: #00326b; text-rendering: optimizeLegibility; margin-top: 0.8em; margin-bottom: 0.5em; line-height: 1.0625em; }
h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small {color: #057aff; line-height: 0; }
h1 { font-size: 2.125em; }
h2 { font-size: 1.6875em; }
h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; }
h4 { font-size: 1.125em; }
h5 { font-size: 1.125em; }
h6 { font-size: 1em; }
hr { border: solid rgba(145, 135, 84, 0.15); border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; }
/* Helpful Typography Defaults */
em, i { font-style: italic; line-height: inherit; }
strong, b { font-weight: bold; line-height: inherit; }
small { font-size: 60%; line-height: inherit; }
code { font-family: "Ubuntu Mono", "Inconsolata", monospace; font-weight: 400; color: #331d00; }
/* Lists */
ul, ol, dl { font-size: 1em; line-height: 1.5; margin-bottom: 1.25em; list-style-position: outside; font-family: inherit; }
ul, ol { margin-left: 1.5em; }
ul.no-bullet, ol.no-bullet { margin-left: 1.5em; }
/* Unordered Lists */
ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ }
ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; }
ul.square { list-style-type: square; }
ul.circle { list-style-type: circle; }
ul.disc { list-style-type: disc; }
ul.no-bullet { list-style: none; }
/* Ordered Lists */
ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; }
/* Definition Lists */
dl dt { margin-bottom: 0.3125em; font-weight: bold; }
dl dd { margin-bottom: 1.25em; }
/* Abbreviations */
abbr, acronym { text-transform: uppercase; font-size: 90%; color: rgba(0, 0, 0, 0.8); border-bottom: 1px dotted #dddddd; cursor: help; }
abbr { text-transform: none; }
/* Blockquotes */
blockquote { margin: 0 0 1.25em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #dddddd; }
blockquote cite { display: block; font-size: 0.8125em; color: #666666; }
blockquote cite:before { content: "\2014 \0020"; }
blockquote cite a, blockquote cite a:visited { color: #666666; }
blockquote, blockquote p { line-height: 1.5; color: #999999; }
/* Microformats */
.vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #dddddd; padding: 0.625em 0.75em; }
.vcard li { margin: 0; display: block; }
.vcard .fn { font-weight: bold; font-size: 0.9375em; }
.vevent .summary { font-weight: bold; }
.vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; }
@media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.25; }
h1 { font-size: 2.75em; }
h2 { font-size: 2.3125em; }
h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; }
h4 { font-size: 1.4375em; } }
/* Tables */
table { background: white; margin-bottom: 1.25em; border: solid 1px rgba(145, 135, 84, 0.15); }
table thead, table tfoot { background: rgba(119, 84, 22, 0.1); font-weight: bold; }
table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: rgba(0, 0, 0, 0.8); text-align: left; }
table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: rgba(0, 0, 0, 0.8); }
table tr.even, table tr.alt, table tr:nth-of-type(even) { background: rgba(119, 84, 22, 0.025); }
table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.5; }
body { tab-size: 4; }
h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.25; }
.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; }
.clearfix:after, .float-group:after { clear: both; }
*:not(pre) > code { font-size: 0.86667em; font-style: normal !important; letter-spacing: 0; padding: 1px 5px 1px 5px; background-color: transparent; border: 1px solid #dddddd; -webkit-border-radius: 3px; border-radius: 3px; line-height: inherit; }
pre, pre > code { line-height: 1.6; color: white; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; }
.keyseq { color: rgba(51, 51, 51, 0.8); }
kbd { font-family: "Ubuntu Mono", "Inconsolata", monospace; display: inline-block; color: rgba(0, 0, 0, 0.8); font-size: 0.65em; line-height: 1.45; background-color: #f7f7f7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; margin: 0 0.15em; padding: 0.2em 0.5em; vertical-align: middle; position: relative; top: -0.1em; white-space: nowrap; }
.keyseq kbd:first-child { margin-left: 0; }
.keyseq kbd:last-child { margin-right: 0; }
.menuseq, .menu { color: rgba(0, 0, 0, 0.8); }
b.button:before, b.button:after { position: relative; top: -1px; font-weight: normal; }
b.button:before { content: "["; padding: 0 3px 0 2px; }
b.button:after { content: "]"; padding: 0 2px 0 3px; }
p a > code:hover { color: #1a0f00; }
#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 0.9375em; padding-right: 0.9375em; }
#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; }
#header:after, #content:after, #footnotes:after, #footer:after { clear: both; }
#content { margin-top: 1.25em; }
#content:before { content: none; }
#header > h1:first-child { color: #703f1c; margin-top: 2.25rem; margin-bottom: 0; }
#header > h1:first-child + #toc { margin-top: 8px; border-top: 1px solid rgba(145, 135, 84, 0.15); }
#header > h1:only-child, body.toc2 #header > h1:nth-last-child(2) { border-bottom: 1px solid rgba(145, 135, 84, 0.15); padding-bottom: 8px; }
#header .details { border-bottom: 1px solid rgba(145, 135, 84, 0.15); line-height: 1.45; padding-top: 0.25em; padding-bottom: 0.25em; padding-left: 0.25em; color: #666666; display: -ms-flexbox; display: -webkit-flex; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; }
#header .details span:first-child { margin-left: -0.125em; }
#header .details span.email a { color: #999999; }
#header .details br { display: none; }
#header .details br + span:before { content: "\00a0\2013\00a0"; }
#header .details br + span.author:before { content: "\00a0\22c5\00a0"; color: #999999; }
#header .details br + span#revremark:before { content: "\00a0|\00a0"; }
#header #revnumber { text-transform: capitalize; }
#header #revnumber:after { content: "\00a0"; }
#content > h1:first-child:not([class]) { color: #703f1c; border-bottom: 1px solid rgba(145, 135, 84, 0.15); padding-bottom: 8px; margin-top: 0; padding-top: 1rem; margin-bottom: 1.25rem; }
#toc { border-bottom: 0px solid #dddddd; padding-bottom: 0.5em; }
#toc > ul { margin-left: 0.125em; }
#toc ul.sectlevel0 > li > a { font-style: italic; }
#toc ul.sectlevel0 ul.sectlevel1 { margin: 0.5em 0; }
#toc ul { font-family: "Varela Round", sans-serif; list-style-type: none; }
#toc li { line-height: 1.3334; margin-top: 0.3334em; }
#toc a { text-decoration: none; }
#toc a:active { text-decoration: underline; }
#toctitle { color: #002c5e; font-size: 1.2em; }
@media only screen and (min-width: 768px) { #toctitle { font-size: 1.375em; }
body.toc2 { padding-left: 15em; padding-right: 0; }
#toc.toc2 { margin-top: 0 !important; background-color: #f2f2f4; position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #dddddd; border-top-width: 0 !important; border-bottom-width: 0 !important; z-index: 1000; padding: 1.25em 1em; height: 100%; overflow: auto; }
#toc.toc2 #toctitle { margin-top: 0; margin-bottom: 0.8rem; font-size: 1.2em; }
#toc.toc2 > ul { font-size: 0.9em; margin-bottom: 0; }
#toc.toc2 ul ul { margin-left: 0; padding-left: 1em; }
#toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; }
body.toc2.toc-right { padding-left: 0; padding-right: 15em; }
body.toc2.toc-right #toc.toc2 { border-right-width: 0; border-left: 1px solid #dddddd; left: auto; right: 0; } }
@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; padding-right: 0; }
#toc.toc2 { width: 20em; }
#toc.toc2 #toctitle { font-size: 1.375em; }
#toc.toc2 > ul { font-size: 0.95em; }
#toc.toc2 ul ul { padding-left: 1.25em; }
body.toc2.toc-right { padding-left: 0; padding-right: 20em; } }
#content #toc { border-style: solid; border-width: 1px; border-color: #d6d6dd; margin-bottom: 1.25em; padding: 1.25em; background: #f2f2f4; -webkit-border-radius: 6px; border-radius: 6px; }
#content #toc > :first-child { margin-top: 0; }
#content #toc > :last-child { margin-bottom: 0; }
#footer { max-width: 100%; background-color: #0b445a; padding: 1.25em; }
#footer-text { color: #fefdfd; line-height: 1.35; }
.sect1 { padding-bottom: 0.625em; }
@media only screen and (min-width: 768px) { .sect1 { padding-bottom: 1.25em; } }
.sect1 + .sect1 { border-top: 0px solid #dddddd; }
#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; z-index: 1001; width: 1.5ex; margin-left: -1.5ex; display: block; text-decoration: none !important; visibility: hidden; text-align: center; font-weight: normal; }
#content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: "\00A7"; display: block; padding-top: 0.1em; }
#content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; }
#content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: #00326b; text-decoration: none; }
#content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: #002652; }
.audioblock, .imageblock, .literalblock, .listingblock, .stemblock, .videoblock { margin-bottom: 1.25em; }
.admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-rendering: optimizeLegibility; text-align: left; }
table.tableblock > caption.title { white-space: nowrap; overflow: visible; max-width: 0; }
.paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { color: #703f1c; }
table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; }
content > img { width:100%; height:100%; -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover; }
.admonitionblock > table { border-collapse: separate; border: 0; background: none; width: 100%; }
.admonitionblock > table td.icon { vertical-align: middle; text-align: center; width: 80px; }
.admonitionblock > table td.icon img { max-width: none; }
.admonitionblock > table td.icon .title { font-weight: bold; font-family: "Varela Round", sans-serif; text-transform: uppercase; }
.admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid rgba(145, 135, 84, 0.15); color: #666666; text-align: left;}
.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; }
.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #eddbdb; margin-bottom: 1.25em; padding: 1.25em; background: #fefdfd; -webkit-border-radius: 6px; border-radius: 6px; }
.exampleblock > .content > :first-child { margin-top: 0; }
.exampleblock > .content > :last-child { margin-bottom: 0; }
.sidebarblock { border-style: solid; border-width: 1px; border-color: #d6d6dd; margin-bottom: 1.25em; padding: 1.25em; background: #f2f2f4; -webkit-border-radius: 6px; border-radius: 6px; }
.sidebarblock > :first-child { margin-top: 0; }
.sidebarblock > :last-child { margin-bottom: 0; }
.sidebarblock > .content > .title { color: #002c5e; margin-top: 0; }
.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; }
.literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint { background: rgba(16, 195, 196, 0.05); }
.sidebarblock .literalblock pre, .sidebarblock .listingblock pre:not(.highlight), .sidebarblock .listingblock pre[class="highlight"], .sidebarblock .listingblock pre[class^="highlight "], .sidebarblock .listingblock pre.CodeRay, .sidebarblock .listingblock pre.prettyprint { background: #f2f1f1; }
.literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { border: 1px solid rgba(16, 195, 196, 0.125); -webkit-border-radius: 6px; border-radius: 6px; word-wrap: break-word; padding: 1em; font-size: 0.8125em; }
.literalblock pre.nowrap, .literalblock pre[class].nowrap, .listingblock pre.nowrap, .listingblock pre[class].nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; }
@media only screen and (min-width: 768px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.90625em; } }
@media only screen and (min-width: 1280px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 1em; } }
.literalblock.output pre { color: rgba(16, 195, 196, 0.05); background-color: inherit; }
.literalblock > .content pre, .listingblock > .content pre { background: #333333; border-width: 2px; border-style: solid; border-color: #dddddd; -webkit-border-radius: 3px; border-radius: 3px; padding: 0.66667em; word-wrap: break-word; }
.listingblock pre.highlightjs { padding: 0; }
.listingblock pre.highlightjs > code { padding: 1em; -webkit-border-radius: 6px; border-radius: 6px; }
/*.listingblock > .content { position: relative; }*/
.listingblock > .content pre, .listingblock > .content pre { background: #333333; border-width: 2px; border-style: solid; border-color: #dddddd; -webkit-border-radius: 3px; border-radius: 3px; padding: 0.66667em; word-wrap: break-word; }
.listingblock code[data-lang]:before { display: none; content: attr(data-lang); position: absolute; font-size: 0.75em; top: 0.425rem; right: 0.5rem; line-height: 1; text-transform: uppercase; color: #999; }
.listingblock:hover code[data-lang]:before { display: block; }
.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; }
.listingblock.terminal pre .command:not([data-prompt]):before { content: "$"; }
table.pyhltable { border-collapse: separate; border: 0; margin-bottom: 0; background: none; }
table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; line-height: 1.4; }
table.pyhltable td.code { padding-left: .75em; padding-right: 0; }
pre.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid rgba(145, 135, 84, 0.15); }
pre.pygments .lineno { display: inline-block; margin-right: .25em; }
table.pyhltable .linenodiv { background: none !important; padding-right: 0 !important; }
.quoteblock { margin: 0 1em 1.25em 1.5em; display: table; }
.quoteblock > .title { margin-left: -1.5em; margin-bottom: 0.75em; }
.quoteblock blockquote, .quoteblock blockquote p { color: #999999; font-size: 1.15rem; line-height: 1.75; word-spacing: 0.1em; letter-spacing: 0; font-style: italic; text-align: justify; }
.quoteblock blockquote { margin: 0; padding: 0; border: 0; }
.quoteblock blockquote:before { content: "\201c"; float: left; font-size: 2.75em; font-weight: bold; line-height: 0.6em; margin-left: -0.6em; color: #002c5e; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }
.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; }
.quoteblock .attribution { margin-top: 0.5em; margin-right: 0.5ex; text-align: right; }
.quoteblock .quoteblock { margin-left: 0; margin-right: 0; padding: 0.5em 0; border-left: 3px solid #666666; }
.quoteblock .quoteblock blockquote { padding: 0 0 0 0.75em; }
.quoteblock .quoteblock blockquote:before { display: none; }
.verseblock { margin: 0 1em 1.25em 1em; }
.verseblock pre { font-family: "Open Sans", "DejaVu Sans", sans; font-size: 1.15rem; color: #999999; font-weight: 300; text-rendering: optimizeLegibility; }
.verseblock pre strong { font-weight: 400; }
.verseblock .attribution { margin-top: 1.25rem; margin-left: 0.5ex; }
.quoteblock .attribution, .verseblock .attribution { font-size: 0.8125em; line-height: 1.45; font-style: italic; }
.quoteblock .attribution br, .verseblock .attribution br { display: none; }
.quoteblock .attribution cite, .verseblock .attribution cite { display: block; letter-spacing: -0.025em; color: #666666; }
.quoteblock.abstract { margin: 0 0 1.25em 0; display: block; }
.quoteblock.abstract blockquote, .quoteblock.abstract blockquote p { text-align: left; word-spacing: 0; }
.quoteblock.abstract blockquote:before, .quoteblock.abstract blockquote p:first-of-type:before { display: none; }
table.tableblock { max-width: 100%; border-collapse: separate; }
table.tableblock td > .paragraph:last-child p > p:last-child, table.tableblock th > p:last-child, table.tableblock td > p:last-child { margin-bottom: 0; }
table.tableblock, th.tableblock, td.tableblock { border: 0 solid rgba(145, 135, 84, 0.15); }
table.grid-all th.tableblock, table.grid-all td.tableblock { border-width: 0 1px 1px 0; }
table.grid-all tfoot > tr > th.tableblock, table.grid-all tfoot > tr > td.tableblock { border-width: 1px 1px 0 0; }
table.grid-cols th.tableblock, table.grid-cols td.tableblock { border-width: 0 1px 0 0; }
table.grid-all * > tr > .tableblock:last-child, table.grid-cols * > tr > .tableblock:last-child { border-right-width: 0; }
table.grid-rows th.tableblock, table.grid-rows td.tableblock { border-width: 0 0 1px 0; }
table.grid-all tbody > tr:last-child > th.tableblock, table.grid-all tbody > tr:last-child > td.tableblock, table.grid-all thead:last-child > tr > th.tableblock, table.grid-rows tbody > tr:last-child > th.tableblock, table.grid-rows tbody > tr:last-child > td.tableblock, table.grid-rows thead:last-child > tr > th.tableblock { border-bottom-width: 0; }
table.grid-rows tfoot > tr > th.tableblock, table.grid-rows tfoot > tr > td.tableblock { border-width: 1px 0 0 0; }
table.frame-all { border-width: 1px; }
table.frame-sides { border-width: 0 1px; }
table.frame-topbot { border-width: 1px 0; }
th.halign-left, td.halign-left { text-align: left; }
th.halign-right, td.halign-right { text-align: right; }
th.halign-center, td.halign-center { text-align: center; }
th.valign-top, td.valign-top { vertical-align: top; }
th.valign-bottom, td.valign-bottom { vertical-align: bottom; }
th.valign-middle, td.valign-middle { vertical-align: middle; }
table thead th, table tfoot th { font-weight: bold; }
tbody tr th { display: table-cell; line-height: 1.5; background: rgba(119, 84, 22, 0.1); }
tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: rgba(0, 0, 0, 0.8); font-weight: bold; }
p.tableblock > code:only-child { background: none; padding: 0; }
p.tableblock { font-size: 1em; }
td > div.verse { white-space: pre; }
ol { margin-left: 1.75em; }
ul li ol { margin-left: 1.5em; }
dl dd { margin-left: 1.125em; }
dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; }
ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.625em; }
ul.unstyled, ol.unnumbered, ul.checklist, ul.none { list-style-type: none; }
ul.unstyled, ol.unnumbered, ul.checklist { margin-left: 0.625em; }
ul.checklist li > p:first-child > .fa-square-o:first-child, ul.checklist li > p:first-child > .fa-check-square-o:first-child { width: 1em; font-size: 0.85em; }
ul.checklist li > p:first-child > input[type="checkbox"]:first-child { width: 1em; position: relative; top: 1px; }
ul.inline { margin: 0 auto 0.625em auto; margin-left: -1.375em; margin-right: 0; padding: 0; list-style: none; overflow: hidden; }
ul.inline > li { list-style: none; float: left; margin-left: 1.375em; display: block; }
ul.inline > li > * { display: block; }
.unstyled dl dt { font-weight: normal; font-style: normal; }
ol.arabic { list-style-type: decimal; }
ol.decimal { list-style-type: decimal-leading-zero; }
ol.loweralpha { list-style-type: lower-alpha; }
ol.upperalpha { list-style-type: upper-alpha; }
ol.lowerroman { list-style-type: lower-roman; }
ol.upperroman { list-style-type: upper-roman; }
ol.lowergreek { list-style-type: lower-greek; }
.hdlist > table, .colist > table { border: 0; background: none; }
.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; }
td.hdlist1, td.hdlist2 { vertical-align: top; padding: 0 0.625em; }
td.hdlist1 { font-weight: bold; padding-bottom: 1.25em; }
.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; }
.colist > table tr > td:first-of-type { padding: 0 0.75em; line-height: 1; }
.colist > table tr > td:last-of-type { padding: 0.25em 0; }
.thumb, .th { line-height: 0; display: inline-block; border: solid 4px white; -webkit-box-shadow: 0 0 0 1px #dddddd; box-shadow: 0 0 0 1px #dddddd; }
.imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; }
.imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; }
.imageblock > .title { margin-bottom: 0; }
.imageblock.thumb, .imageblock.th { border-width: 6px; }
.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; }
.image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; }
.image.left { margin-right: 0.625em; }
.image.right { margin-left: 0.625em; }
a.image { text-decoration: none; display: inline-block; }
a.image object { pointer-events: none; }
sup.footnote, sup.footnoteref { font-size: 0.875em; position: static; vertical-align: super; }
sup.footnote a, sup.footnoteref a { text-decoration: none; }
sup.footnote a:active, sup.footnoteref a:active { text-decoration: underline; }
#footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; }
#footnotes hr { width: 20%; min-width: 6.25em; margin: -0.25em 0 0.75em 0; border-width: 1px 0 0 0; }
#footnotes .footnote { padding: 0 0.375em 0 0.225em; line-height: 1.3334; font-size: 0.875em; margin-left: 1.2em; text-indent: -1.05em; margin-bottom: 0.2em; }
#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; }
#footnotes .footnote:last-of-type { margin-bottom: 0; }
#content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; }
.gist .file-data > table { border: 0; background: #fff; width: 100%; margin-bottom: 0; }
.gist .file-data > table td.line-data { width: 99%; }
div.unbreakable { page-break-inside: avoid; }
.big { font-size: larger; }
.small { font-size: smaller; }
.underline { text-decoration: underline; }
.overline { text-decoration: overline; }
.line-through { text-decoration: line-through; }
.aqua { color: #00bfbf; }
.aqua-background { background-color: #00fafa; }
.black { color: black; }
.black-background { background-color: black; }
.blue { color: #0000bf; }
.blue-background { background-color: #0000fa; }
.fuchsia { color: #bf00bf; }
.fuchsia-background { background-color: #fa00fa; }
.gray { color: #606060; }
.gray-background { background-color: #7d7d7d; }
.green { color: #006000; }
.green-background { background-color: #007d00; }
.lime { color: #00bf00; }
.lime-background { background-color: #00fa00; }
.maroon { color: #600000; }
.maroon-background { background-color: #7d0000; }
.navy { color: #000060; }
.navy-background { background-color: #00007d; }
.olive { color: #606000; }
.olive-background { background-color: #7d7d00; }
.purple { color: #600060; }
.purple-background { background-color: #7d007d; }
.red { color: #bf0000; }
.red-background { background-color: #fa0000; }
.silver { color: #909090; }
.silver-background { background-color: #bcbcbc; }
.teal { color: #006060; }
.teal-background { background-color: #007d7d; }
.white { color: #bfbfbf; }
.white-background { background-color: #fafafa; }
.yellow { color: #bfbf00; }
.yellow-background { background-color: #fafa00; }
span.icon > .fa { cursor: default; }
.admonitionblock td.icon [class^="fa icon-"] { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; }
.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #004060; }
.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; }
.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; }
.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; }
.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; }
.conum[data-value] { display: inline-block; color: #fff !important; background-color: rgba(0, 0, 0, 0.8); -webkit-border-radius: 100px; border-radius: 100px; text-align: center; font-size: 0.75em; width: 1.67em; height: 1.67em; line-height: 1.67em; font-family: "Open Sans", "DejaVu Sans", sans-serif; font-style: normal; font-weight: bold; }
.conum[data-value] * { color: #fff !important; }
.conum[data-value] + b { display: none; }
.conum[data-value]:after { content: attr(data-value); }
pre .conum[data-value] { position: relative; top: -0.125em; }
b.conum * { color: inherit !important; }
.conum:not([data-value]):empty { display: none; }
#toc.toc2 ul ul { list-style-type: circle; padding-left: 2em; }
.sect1 { padding-bottom: 0 !important; margin-bottom: 2.5em; }
#header h1 { font-weight: bold; position: relative; left: -0.0625em; }
#content h2, #content h3, #content #toctitle, #content .sidebarblock > .content > .title, #content h4, #content h5, #content #toctitle { position: relative; left: -0.0625em; }
#content h2 { font-weight: bold; }
.paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { color: black; }
pre.pygments.highlight { background-color: rgba(16, 195, 196, 0.05); }
.pygments .tok-err { border: none !important; color: #800000 !important; }
.pygments .tok-c { color: #999 !important; }
/*Telestax stylesheet.css */
.wp-caption,
.wp-caption-text,
.sticky,
.gallery-caption,
.bypostauthor{
opacity: 1;
}
.clearfix:before,
.clearfix:after {
content: " "; /* 1 */
display: table; /* 2 */
}
.clearfix:after {
clear: both;
}
.clearfix {
*zoom: 1;
}
.clear:after {
clear: both;
content: "";
display: block;
}
/* Webkit */
::selection {
background: #f25f33;
color: #fff;
}
/* Gecko/Mozilla */
::-moz-selection {
background: #f25f33
color: #fff;
}
.alignleft {
float: left;
margin: 0 20px 20px 0;
}
.alignright {
float: right;
margin: 0 0 20px 20px;
}
.aligncenter {
display: block;
margin: 10px auto;
}
.header_top .aligncenter{
margin: 8px auto;
}
.text-align-right {
text-align: right;
}
.text-align-left {
text-align: left;
}
.text-align-center {
text-align: center;
}
/*.content ul ul,
.content ol ol{
padding:0 0 0 15px;
}*/
/* =Reset default browser CSS.
-------------------------------------------------------------- */
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,
ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td
{
background: transparent;
border: 0;
margin: 0;
padding: 0;
vertical-align: baseline;
outline: none;
}
article, aside, details, figcaption, figure, footer, header, hgroup, nav, section {
display: block;
}
blockquote {
quotes: none;
}
blockquote:before,blockquote:after {
content: '';
content: none;
}
del {
text-decoration: line-through;
}
/* tables still need 'cellspacing="0"' in the markup */
table {
border-collapse: collapse;
border-spacing: 0;
border: medium none;
vertical-align: middle;
}
table th{
border: 0;
padding: 5px 7px;
text-align: center;
}
table td {
padding: 5px 10px;
text-align: center;
}
a img {
border: none;
}
img{
max-width: 100%;
height: auto;
}
h1,h2,h3,h4,h5,h6{
color: #303030;
}
h1{
font-size: 30px;
line-height: 1.25em; /* 20px/16px */
}
h2{
font-size: 24px;
line-height: 1.384615384615385em; /* 36px/26px */
text-transform:uppercase;
letter-spacing:1px;
font-weight: 600;
}
h3{
font-size: 17px;
line-height: 1.304347826086957em; /* 30px/23px */
text-transform:uppercase;
letter-spacing:1px;
font-weight: 600;
}
h4{
font-size: 19px;
line-height: 1.375em; /* 22px/16px */
font-weight: 400;
}
h5{
font-size: 15px;
line-height: 1.571428571428571em; /* 22px/14px */
text-transform:uppercase;
letter-spacing:1px;
font-weight: 600;
}
h6{
font-size: 13px;
line-height: 1.538461538461538em; /* 20px/13px */
text-transform:uppercase;
letter-spacing:1px;
font-weight:600;
}
h1 a,
h2 a,
h3 a,
h4 a,
h5 a,
h6 a{
color: #303030;
}
h1 a:hover,
h2 a:hover,
h3 a:hover,
h4 a:hover,
h5 a:hover,
h6 a:hover{
color: #1abc9c;
}
a,
p a{
color: #303030;
text-decoration: none;
cursor: pointer;
}
a:hover,
p a:hover {
color: #1abc9c;
text-decoration: none;
}
input[type='submit'],
.woocommerce input[type='button'],
.woocommerce-page input[type='button']{
-webkit-appearance: none;
}
ul{
list-style-position:inside;
}
/* =Structure
-------------------------------------------------------------- */
html{
height: 100%;
margin: 0px !important;
-webkit-transition: all 1.3s ease-out;
-moz-transition: all 1.3s ease-out;
-o-transition: all 1.3s ease-out;
-ms-transition: all 1.3s ease-out;
transition: all 1.3s ease-out;
}
body{
font-family: 'Roboto', sans-serif;
font-size: 16px;
line-height: 26px;
color: #818181;
font-weight: 400;
background-color: #f6f6f6;
overflow-y: scroll;
overflow-x: hidden !important;
-webkit-font-smoothing: antialiased;
}
.wrapper {
background-color: #f6f6f6;
position: relative;
z-index: 1000;
-webkit-transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
-moz-transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
-o-transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
-ms-transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
left: 0px;
}
.right_side_menu_opened .wrapper{
left: -270px;
}
.right_side_menu_opened .wrapper header.fixed,
.right_side_menu_opened .wrapper header.fixed_hiding,
.right_side_menu_opened .wrapper header.sticky,
.right_side_menu_opened .wrapper header.fixed_top_header .top_header{
left: -270px;
}
@media only screen and (min-width: 1100px){
.right_side_menu_opened:not(.boxed) .carousel-inner:not(.relative_position){
left: -270px !important;
}
}
.wrapper_inner{
width: 100%;
overflow: hidden;
}
body.boxed .wrapper_inner{
overflow: visible;
}
body.boxed .content{
overflow: hidden;
}
.meta{
display: none;
}
.ajax_loader {
position: fixed;
top: 50%;
left: 50%;
z-index: 1100;
display: none;
}
@media only screen and (min-width: 1000px){
body.vertical_menu_enabled:not(.vertical_menu_hidden) .ajax_loader{
margin-left: 130px;
}
body.vertical_menu_enabled.vertical_menu_hidden .ajax_loader{
margin-left: 20px;
}
}
.ajax_loader_1 {
position: relative;
display: inline-block;
width: 100%;
height: 100%;
}
.ajax_loader_2 {
margin: -50% 0 0 -50%;
}
/* pulse - start */
.ajax_loader .pulse {
width: 32px;
height: 32px;
margin: -16px 0px 0px -16px;
background-color: #303030;
-webkit-border-radius: 16px;
-moz-border-radius: 16px;
-ms-border-radius: 16px;
-o-border-radius: 16px;
border-radius: 16px;
-webkit-animation: scaleout 1.0s infinite ease-in-out;
animation: scaleout 1.0s infinite ease-in-out;
}
@-webkit-keyframes scaleout {
0% {
-webkit-transform: scale(0);
}
100% {
-webkit-transform: scale(1);
opacity: 0;
}
}
@-moz-keyframes scaleout {
0% {
-moz-transform: scale(0);
}
100% {
-moz-transform: scale(1);
opacity: 0;
}
}
@-ms-keyframes scaleout {
0% {
-ms-transform: scale(0);
}
100% {
-ms-transform: scale(1);
opacity: 0;
}
}
@-o-keyframes scaleout {
0% {
-o-transform: scale(0);
}
100% {
-o-transform: scale(1);
opacity: 0;
}
}
@keyframes scaleout {
0% {
transform: scale(0);
-webkit-transform: scale(0);
}
100% {
transform: scale(1);
-webkit-transform: scale(1);
opacity: 0;
}
}
/* pulse - end */
/* double pulse - start */
.ajax_loader .double_pulse {
width: 40px;
height: 40px;
margin: -20px 0px 0px -20px;
position: relative;
}
.ajax_loader .double_pulse .double-bounce1, .ajax_loader .double_pulse .double-bounce2 {
width: 100%;
height: 100%;
border-radius: 50%;
background-color: #303030;
opacity: 0.6;
position: absolute;
top: 0;
left: 0;
-webkit-animation: bounce 2.0s infinite ease-in-out;
animation: bounce 2.0s infinite ease-in-out;
}
.ajax_loader .double_pulse .double-bounce2 {
-webkit-animation-delay: -1.0s;
animation-delay: -1.0s;
}
@-webkit-keyframes bounce {
0%, 100% { -webkit-transform: scale(0.0) }
50% { -webkit-transform: scale(1.0) }
}
@keyframes bounce {
0%, 100% {
transform: scale(0.0);
-webkit-transform: scale(0.0);
} 50% {
transform: scale(1.0);
-webkit-transform: scale(1.0);
}
}
/* double pulse - end */
/* cube - start */
.ajax_loader .cube {
width: 60px;
height: 60px;
margin: -30px 0px 0px -30px;
background-color: #303030;
-webkit-animation: rotateplane 1.2s infinite ease-in-out;
animation: rotateplane 1.2s infinite ease-in-out;
}
@-webkit-keyframes rotateplane {
0% { -webkit-transform: perspective(120px) }
50% { -webkit-transform: perspective(120px) rotateY(180deg) }
100% { -webkit-transform: perspective(120px) rotateY(180deg) rotateX(180deg) }
}
@keyframes rotateplane {
0% {
transform: perspective(120px) rotateX(0deg) rotateY(0deg);
-webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg)
} 50% {
transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
-webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg)
} 100% {
transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
-webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
}
}
/* cube - end */
/* rotating cubes - start */
.ajax_loader .rotating_cubes {
width: 32px;
height: 32px;
margin: -16px 0px 0px -16px;
position: relative;
}
.ajax_loader .rotating_cubes .cube1, .ajax_loader .rotating_cubes .cube2 {
background-color: #303030;
width: 10px;
height: 10px;
position: absolute;
top: 0;
left: 0;
-webkit-animation: cubemove 1.8s infinite ease-in-out;
animation: cubemove 1.8s infinite ease-in-out;
}
.ajax_loader .rotating_cubes .cube2 {
-webkit-animation-delay: -0.9s;
animation-delay: -0.9s;
}
@-webkit-keyframes cubemove {
25% { -webkit-transform: translateX(42px) rotate(-90deg) scale(0.5) }
50% { -webkit-transform: translateX(42px) translateY(42px) rotate(-180deg) }
75% { -webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5) }
100% { -webkit-transform: rotate(-360deg) }
}
@keyframes cubemove {
25% {
transform: translateX(42px) rotate(-90deg) scale(0.5);
-webkit-transform: translateX(42px) rotate(-90deg) scale(0.5);
} 50% {
transform: translateX(42px) translateY(42px) rotate(-179deg);
-webkit-transform: translateX(42px) translateY(42px) rotate(-179deg);
} 50.1% {
transform: translateX(42px) translateY(42px) rotate(-180deg);
-webkit-transform: translateX(42px) translateY(42px) rotate(-180deg);
} 75% {
transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5);
-webkit-transform: translateX(0px) translateY(42px) rotate(-270deg) scale(0.5);
} 100% {
transform: rotate(-360deg);
-webkit-transform: rotate(-360deg);
}
}
/* rotating cubes - end */
/* stripes - start */
.ajax_loader .stripes {
width: 50px;
height: 60px;
margin: -30px 0px 0px -25px;
text-align: center;
font-size: 10px;
}
.ajax_loader .stripes > div {
background-color: #303030;
height: 100%;
width: 6px;
display: inline-block;
margin: 0 3px 0 0;
-webkit-animation: stretchdelay 1.2s infinite ease-in-out;
animation: stretchdelay 1.2s infinite ease-in-out;
}
.ajax_loader .stripes .rect2 {
-webkit-animation-delay: -1.1s;
animation-delay: -1.1s;
}
.ajax_loader .stripes .rect3 {
-webkit-animation-delay: -1.0s;
animation-delay: -1.0s;
}
.ajax_loader .stripes .rect4 {
-webkit-animation-delay: -0.9s;
animation-delay: -0.9s;
}
.ajax_loader .stripes .rect5 {
-webkit-animation-delay: -0.8s;
animation-delay: -0.8s;
}
@-webkit-keyframes stretchdelay {
0%, 40%, 100% { -webkit-transform: scaleY(0.4) }
20% { -webkit-transform: scaleY(1.0) }
}
@keyframes stretchdelay {
0%, 40%, 100% {
transform: scaleY(0.4);
-webkit-transform: scaleY(0.4);
} 20% {
transform: scaleY(1.0);
-webkit-transform: scaleY(1.0);
}
}
/* stripes - end */
/* wave - start */
.ajax_loader .wave {
width: 72px;
text-align: center;
margin: -9px 0px 0px -36px;
}
.ajax_loader .wave > div {
width: 18px;
height: 18px;
background-color: #303030;
margin: 0px 3px 0px 0px;
border-radius: 100%;
display: inline-block;
-webkit-animation: bouncedelay 1.4s infinite ease-in-out;
animation: bouncedelay 1.4s infinite ease-in-out;
/* Prevent first frame from flickering when animation starts */
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
}
.ajax_loader .wave .bounce1 {
-webkit-animation-delay: -0.32s;
animation-delay: -0.32s;
}
.ajax_loader .wave .bounce2 {
-webkit-animation-delay: -0.16s;
animation-delay: -0.16s;
}
@-webkit-keyframes bouncedelay {
0%, 80%, 100% { -webkit-transform: scale(0.0) }
40% { -webkit-transform: scale(1.0) }
}
@keyframes bouncedelay {
0%, 80%, 100% {
transform: scale(0.0);
-webkit-transform: scale(0.0);
} 40% {
transform: scale(1.0);
-webkit-transform: scale(1.0);
}
}
/* wave - end */
/* two_rotating_circles - start */
.ajax_loader .two_rotating_circles {
width: 40px;
height: 40px;
margin: -20px 0px 0px -20px;
position: relative;
text-align: center;
-webkit-animation: rotatecircles 2.0s infinite linear;
animation: rotatecircles 2.0s infinite linear;
}
.ajax_loader .two_rotating_circles .dot1, .ajax_loader .two_rotating_circles .dot2 {
width: 60%;
height: 60%;
display: inline-block;
position: absolute;
top: 0;
background-color: #303030;
border-radius: 100%;
-webkit-animation: bounce 2.0s infinite ease-in-out;
animation: bounce 2.0s infinite ease-in-out;
}
.ajax_loader .two_rotating_circles .dot2 {
top: auto;
bottom: 0px;
-webkit-animation-delay: -1.0s;
animation-delay: -1.0s;
}
@-webkit-keyframes rotatecircles { 100% { -webkit-transform: rotate(360deg) }}
@keyframes rotatecircles { 100% { transform: rotate(360deg); -webkit-transform: rotate(360deg) }}
/* two_rotating_circles - end */
/* five_rotating_circles - start */
.ajax_loader .five_rotating_circles {
width: 60px;
height: 60px;
margin: -30px 0px 0px -30px;
position: relative;
}
.ajax_loader .five_rotating_circles .container1 > div, .ajax_loader .five_rotating_circles .container2 > div, .ajax_loader .five_rotating_circles .container3 > div {
width: 12px;
height: 12px;
background-color: #303030;
border-radius: 100%;
position: absolute;
-webkit-animation: bouncedelay 1.2s infinite ease-in-out;
animation: bouncedelay 1.2s infinite ease-in-out;
/* Prevent first frame from flickering when animation starts */
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
}
.ajax_loader .five_rotating_circles .spinner-container {
position: absolute;
width: 100%;
height: 100%;
}
.ajax_loader .five_rotating_circles .container2 {
-webkit-transform: rotateZ(45deg);
transform: rotateZ(45deg);
}
.ajax_loader .five_rotating_circles .container3 {
-webkit-transform: rotateZ(90deg);
transform: rotateZ(90deg);
}
.ajax_loader .five_rotating_circles .circle1 { top: 0; left: 0; }
.ajax_loader .five_rotating_circles .circle2 { top: 0; right: 0; }
.ajax_loader .five_rotating_circles .circle3 { right: 0; bottom: 0; }
.ajax_loader .five_rotating_circles .circle4 { left: 0; bottom: 0; }
.ajax_loader .five_rotating_circles .container2 .circle1 {
-webkit-animation-delay: -1.1s;
animation-delay: -1.1s;
}
.ajax_loader .five_rotating_circles .container3 .circle1 {
-webkit-animation-delay: -1.0s;
animation-delay: -1.0s;
}
.ajax_loader .five_rotating_circles .container1 .circle2 {
-webkit-animation-delay: -0.9s;
animation-delay: -0.9s;
}
.ajax_loader .five_rotating_circles .container2 .circle2 {
-webkit-animation-delay: -0.8s;
animation-delay: -0.8s;
}
.ajax_loader .five_rotating_circles .container3 .circle2 {
-webkit-animation-delay: -0.7s;
animation-delay: -0.7s;
}
.ajax_loader .five_rotating_circles .container1 .circle3 {
-webkit-animation-delay: -0.6s;
animation-delay: -0.6s;
}
.ajax_loader .five_rotating_circles .container2 .circle3 {
-webkit-animation-delay: -0.5s;
animation-delay: -0.5s;
}
.ajax_loader .five_rotating_circles .container3 .circle3 {
-webkit-animation-delay: -0.4s;
animation-delay: -0.4s;
}
.ajax_loader .five_rotating_circles .container1 .circle4 {
-webkit-animation-delay: -0.3s;
animation-delay: -0.3s;
}
.ajax_loader .five_rotating_circles .container2 .circle4 {
-webkit-animation-delay: -0.2s;
animation-delay: -0.2s;
}
.ajax_loader .five_rotating_circles .container3 .circle4 {
-webkit-animation-delay: -0.1s;
animation-delay: -0.1s;
}
/* five_rotating_circles - end */
body.smooth_scroll {
overflow-y: hidden;
}
body.boxed .wrapper_inner,
body.boxed .footer_inner{
width: 1150px;
margin: 0 auto;
}
/* ==========================================================================
Header styles
========================================================================== */
/**
* Generic header styles
*/
header {
width: 100%;
display: inline-block;
margin: 0px 0px 0px 0px;
vertical-align: middle;
position: relative;
z-index: 110;
-webkit-backface-visibility:hidden;
}
header .header_inner_left {
position: absolute;
left: 45px;
top: 0px;
}
header .container_inner .header_inner_left{
position: absolute;
left: 0px;
top: 0px;
}
.boxed header{
background-color: transparent !important;
border: 0px !important;
}
.boxed .header_inner{
width: 1150px;
margin: 0px auto;
}
.header_inner_right{
float: right;
position: relative;
z-index: 110;
}
/* Header top styles
========================================================================== */
.header_top {
position: relative;
z-index: 111;
line-height: 33px;
height: 33px;
padding: 0;
font-size: 15px;
background-color: #fff;
-webkit-transition: all 0.2s ease 0s;
-moz-transition: all 0.2s ease 0s;
-o-transition: all 0.2s ease 0s;
transition: all 0.2s ease 0s;
}
header.scrolled .header_top {
background-color: #fff !important;
}
.header_top p{
line-height: 32px;
padding: 0 15px;
}
.header_top .left{
float: left;
}
.header_top .right{
float: right;
}
.header_top .right .inner #lang_sel {
float: left;
padding: 0 0 0 0px;
}
.header_top .inner #lang_sel > ul {
list-style: none;
}
.header_top .left .inner > div,
.header_top .left .inner > div:last-child {
float:left;
border-bottom: 0;
border-top: 0;
}
.header_top .right .inner > div {
border-left: 0;
float: left;
}
header.scrolled:not(.scroll_header_top_area) .header_top {
border-bottom: 0;
}
/* header widgets in light and dark header styles
========================================================================== */
header.light:not(.sticky) .q_social_icon_holder i.simple_social,
header.light:not(.sticky) .header-widget,
header.light:not(.sticky) .header-widget.widget_nav_menu ul.menu > li > a,
header.light:not(.sticky) .header-widget p,
header.light:not(.sticky) .header-widget a,
header.light:not(.sticky) .header-widget span,
header.light.header_style_on_scroll .q_social_icon_holder i.simple_social,
header.light.header_style_on_scroll .header-widget,
header.light.header_style_on_scroll .header-widget.widget_nav_menu ul.menu > li > a,
header.light.header_style_on_scroll .header-widget p,
header.light.header_style_on_scroll .header-widget a,
header.light.header_style_on_scroll .header-widget span{
color:#ffffff;
}
header.light:not(.sticky) .q_social_icon_holder i.simple_social,
header.light:not(.sticky) #lang_sel > ul > li > a,
header.light:not(.sticky) #lang_sel_click > ul > li> a,
header.light.header_style_on_scroll .q_social_icon_holder i.simple_social,
header.light.header_style_on_scroll #lang_sel > ul > li > a,
header.light.header_style_on_scroll #lang_sel_click > ul > li> a,
header.light:not(.sticky) .textwidget span,
header.light:not(.sticky) .textwidget span:hover,
header.light.header_style_on_scroll .textwidget span,
header.light.header_style_on_scroll .textwidget span:hover{
color:#fff !important;
}
header.dark:not(.sticky) .q_social_icon_holder i.simple_social,
header.dark:not(.sticky) .header-widget,
header.dark:not(.sticky) .header-widget.widget_nav_menu ul.menu > li > a,
header.dark:not(.sticky) .header-widget p,
header.dark:not(.sticky) .header-widget a,
header.dark:not(.sticky) .header-widget span,
header.dark.header_style_on_scroll .q_social_icon_holder i.simple_social,
header.dark.header_style_on_scroll .header-widget,
header.dark.header_style_on_scroll .header-widget.widget_nav_menu ul.menu > li > a,
header.dark.header_style_on_scroll .header-widget p,
header.dark.header_style_on_scroll .header-widget a,
header.dark.header_style_on_scroll .header-widget span{
color:#000;
}
header.dark:not(.sticky) .q_social_icon_holder i.simple_social,
header.dark:not(.sticky) #lang_sel > ul > li > a,
header.dark:not(.sticky) #lang_sel_click > ul > li> a,
header.dark.header_style_on_scroll .q_social_icon_holder i.simple_social,
header.dark.header_style_on_scroll #lang_sel > ul > li > a,
header.dark.header_style_on_scroll #lang_sel_click > ul > li> a,
header.dark:not(.sticky) .textwidget span,
header.dark:not(.sticky) .textwidget span:hover,
header.dark.header_style_on_scroll .textwidget span,
header.dark.header_style_on_scroll .textwidget span:hover{
color:#000 !important;
}
/* Header bottom styles
========================================================================== */
.header_bottom {
padding: 0px 45px;
position: relative;
background-color: #fff;
-webkit-transition: all 0.2s ease 0s;
-moz-transition: all 0.2s ease 0s;
-o-transition: all 0.2s ease 0s;
transition: all 0.2s ease 0s;
}
.boxed .header_bottom{
padding: 0px 25px;
}
/* Generic logo styles
========================================================================== */
.logo_wrapper{
height: 100px;
float: left;
}
.q_logo{
position: relative;
top: 50%;
left: 0px;
}
.q_logo a{
position: relative;
display: block;
visibility: hidden;
}
.q_logo img{
display: block;
opacity:1;
position: absolute;
top: -50%;
width: auto !important;
max-width: none;
-webkit-transition: opacity 0.6s ease-in-out;
-moz-transition: opacity 0.6s ease-in-out;
-o-transition: opacity 0.6s ease-in-out;
-ms-transition: opacity 0.6s ease-in-out;
}
/* Specific logo styles */
.q_logo img.light,
.q_logo img.sticky,
.q_logo img.dark,
.q_logo img.popup,
.q_logo img.mobile {
opacity:0;
}
header.scrolled:not(.header_style_on_scroll) .q_logo img.normal,
header.scrolled.dark:not(.header_style_on_scroll) .q_logo img.normal,
header.scrolled.light:not(.header_style_on_scroll) .q_logo img.normal {
opacity: 1;
}
header.scrolled:not(.header_style_on_scroll) .q_logo img.light,
header.scrolled.light:not(.header_style_on_scroll) .q_logo img.light,
header.scrolled.dark:not(.header_style_on_scroll) .q_logo img.light,
header.scrolled:not(.header_style_on_scroll) .q_logo img.dark,
header.scrolled.light:not(.header_style_on_scroll) .q_logo img.dark,
header.scrolled.dark:not(.header_style_on_scroll) .q_logo img.dark {
opacity: 0;
}
header.light .q_logo img.normal{
opacity:0;
}
header.light .q_logo img.light{
opacity:1;
}
header.light .q_logo img.dark{
opacity:0;
}
header.dark .q_logo img.normal{
opacity:0;
}
header.dark .q_logo img.light{
opacity:0;
}
header.dark .q_logo img.dark{
opacity:1;
}
/* Sticky header styles
========================================================================== */
.hide_inital_sticky header.stick{
-ms-transform: translateY(-100%);
-webkit-transform: translateY(-100%);
transform: translateY(-100%);
}
.hide_inital_sticky header.stick.sticky{
-ms-transform: none;
-webkit-transform: none;
transform: none;
}
header.sticky {
-webkit-transition: all 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
-moz-transition: all 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
-o-transition: all 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
-ms-transition: all 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
transition: all 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
top: -120px;
left: 0;
position: fixed;
-moz-background-clip:border;
-webkit-background-clip:border;
background-clip:border-box;
-moz-background-clip:padding;
-webkit-background-clip:padding;
background-clip:padding-box;
-moz-background-clip:content;
-webkit-background-clip:content;
background-clip:content-box;
}
header.sticky .header_top{
display: none;
}
header.sticky .header_bottom {
background-color: #fff !important;
box-shadow: 0 1px 3px rgba(0,0,0,0.11);
}
header.sticky.no_shadow .header_bottom {
box-shadow: none;
}
header.sticky.centered_logo {
top: -300px;
}
header.sticky.sticky_animate {
top:0px;
}
header.sticky:not(.header_style_on_scroll) .q_logo img.sticky {
opacity:1;
}
header.sticky:not(.header_style_on_scroll) .q_logo img.normal,
header.sticky:not(.header_style_on_scroll) .q_logo img.light,
header.sticky:not(.header_style_on_scroll) .q_logo img.dark,
header.sticky:not(.header_style_on_scroll) .q_logo img.popup,
header.sticky:not(.header_style_on_scroll) .q_logo img.mobile{
opacity:0 !important;
}
header.sticky .logo_wrapper,
header.sticky.centered_logo .logo_wrapper{
height: 60px !important;
float: left;
}
header.sticky .drop_down .second{
margin-top: 0;
}
header.sticky .header_fixed_right_area {
display: none;
}
header.sticky .side_menu_button{
height: 60px;
}
.sticky .header_menu_bottom{
position: static;
}
/* Fixed header styles
========================================================================== */
header.fixed,
header.fixed_hiding,
header.fixed_top_header .top_header{
-webkit-transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
-moz-transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
-o-transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
-ms-transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
width: 100%;
position: fixed;
z-index: 110;
top:0px;
left: 0px;
}
header.fixed.scrolled .header_bottom,
header.fixed_hiding.scrolled .header_bottom{
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.11);
-moz-box-shadow: 0 1px 3px rgba(0,0,0,0.11);
box-shadow: 0 1px 3px rgba(0,0,0,0.11);
background-color: #fff;
}
/* Header with menu on bottom styles
========================================================================== */
header.menu_bottom .header_inner_left {
left: 0;
}
header:not(.sticky) .header_menu_bottom nav.main_menu > ul > li > a {
line-height: 60px;
}
header:not(.sticky) .header_menu_bottom nav.main_menu > ul > li:first-child > a {
padding-left: 0;
}
header.menu_bottom:not(.sticky) .drop_down .second {
top: 100%;
}
header:not(.sticky) .header_menu_bottom .side_menu_button {
height: 60px;
}
header.menu_bottom.has_header_fixed_right .mobile_menu_button {
height: 130px;
}
header.menu_bottom .header_inner_left{
position: relative;
}
.menu_bottom.sticky .container_inner .header_inner_left{
position: absolute;
}
.menu_bottom .logo_wrapper{
float: none;
}
.menu_bottom .q_logo a{
display:inline-block;
}
.menu_bottom.sticky .logo_wrapper{
float: left;
}
.header_menu_bottom {
position: relative;
display: block;
}
/* Header styles when logo is in center
========================================================================== */
header.centered_logo{
text-align: center;
}
header.centered_logo .header_inner_left{
float: none;
position: relative;
display: block;
margin: 20px 0px 10px 0px;
}
header.centered_logo.sticky .header_inner_left{
margin: 0px;
}
header.centered_logo .logo_wrapper{
float: none;
height: auto !important;
}
header.centered_logo .q_logo{
top: 0px;
}
header.centered_logo.sticky .q_logo{
top: 50%;
}
header.centered_logo .q_logo a{
display: inline-block;
vertical-align: middle;
}
header.centered_logo .q_logo img{
top: 0px;
margin: 0px;
}
@media only screen and (min-width: 1000px){
header.centered_logo:not(.sticky ) .q_logo img{ /* only not sticky is set here because on sticky menu logo is moved left from site left edge */
-webkit-transform: translate(-50%, 0px);
-moz-transform: translate(-50%, 0px);
-ms-transform: translate(-50%, 0px);
-o-transform: translate(-50%, 0px);
transform: translate(-50%, 0px);
}
}
header.centered_logo.centered_logo_animate .q_logo img,
header:not(.centered_logo) .q_logo img{
height: 100%;
}
header.centered_logo.sticky .q_logo img{
top: -50%;
}
header.centered_logo.sticky .q_logo img{
height: 100% !important;
}
header.centered_logo .header_inner_right{
float: none;
display: inline-block;
position: relative;
vertical-align: middle;
}
header.centered_logo .header_right_widget{
float: left;
}
header.centered_logo nav.main_menu,
header.centered_logo nav.main_menu.right{
position: relative;
display: inline-block;
left: auto;
float: none;
vertical-align: middle;
}
header.centered_logo nav.main_menu > ul{
left: 0px;
}
@media only screen and (min-width: 1000px){
header.fixed_hiding .holeder_for_hidden_menu{
overflow: hidden;
max-height: 150px;
vertical-align: middle;
-webkit-transition: max-height 0.2s cubic-bezier(0.23, 1, 0.32, 1) 0s;
-moz-transition: max-height 0.2s cubic-bezier(0.23, 1, 0.32, 1) 0s;
-o-transition: max-height 0.2s cubic-bezier(0.23, 1, 0.32, 1) 0s;
-ms-transition: max-height 0.2s cubic-bezier(0.23, 1, 0.32, 1) 0s;
transition: max-height 0.2s cubic-bezier(0.23, 1, 0.32, 1) 0s;
}
header.fixed_hiding.scrolled .holeder_for_hidden_menu{
max-height: 0px;
}
header.fixed_hiding .holeder_for_hidden_menu:hover{
overflow: visible;
}
header.fixed_hiding.scrolled:hover .holeder_for_hidden_menu{
max-height: 150px;
transition-duration: 0.5s;
-webkit-transition-duration: 0.8s;
-moz-transition-duration: 0.8s;
-ms-transition-duration: 0.8s;
-o-transition-duration: 0.8s;
}
header.fixed_hiding.centered_logo .header_inner_left{
margin: 20px 0px;
display: table;
width: 100%;
}
header.fixed_hiding.centered_logo.fixed_hiding .header_inner_left{
height: 50px;
}
header.fixed_hiding .header-left-from-logo-widget,
header.fixed_hiding .header-right-from-logo-widget,
header.fixed_hiding .logo_wrapper{
display: table-cell;
width: 33.33%;
vertical-align: middle;
position: relative;
}
header.fixed_hiding .header-left-from-logo-widget-inner,
header.fixed_hiding .header-right-from-logo-widget-inner{
width: 100%;
}
header.fixed_hiding .header-left-from-logo-widget{
text-align: left;
}
header.fixed_hiding .header-right-from-logo-widget{
text-align: right;
}
header.fixed_hiding .q_logo a,
header.fixed_hiding .q_logo{
max-height: 124px;
opacity: 1;
-webkit-transition: max-height 0.2s ease 0s, opacity 0.2s ease 0s;
-moz-transition: max-height 0.2s ease 0s, opacity 0.2s ease 0s;
-o-transition: max-height 0.2s ease 0s, opacity 0.2s ease 0s;
-ms-transition: max-height 0.2s ease 0s, opacity 0.2s ease 0s;
transition: max-height 0.2s ease-out 0s, opacity 0.2s ease 0s;
}
header.fixed_hiding.scrolled .q_logo,
header.fixed_hiding.scrolled .q_logo a{
-webkit-transition: max-height 0.2s ease 0s, opacity 0.4s ease 0s;
-moz-transition: max-height 0.2s ease 0s, opacity 0.4s ease 0s;
-o-transition: max-height 0.2s ease 0s, opacity 0.4s ease 0s;
-ms-transition: max-height 0.2s ease 0s, opacity 0.4s ease 0s;
transition: max-height 0.2s ease-out 0s, opacity 0.4s ease 0s;
max-height: 0px !important;
opacity: 0;
}
header.fixed_hiding .q_logo_hidden a{
height: 50px;
position: relative;
display: block;
opacity: 0;
max-height: 0px;
-webkit-transition: opacity 0s ease 0s, max-height 0s ease 0s;
-moz-transition: opacity 0s ease 0s, max-height 0s ease 0s;
-o-transition: opacity 0s ease 0s, max-height 0s ease 0s;
-ms-transition: opacity 0s ease 0s, max-height 0s ease 0s;
transition: opacity 0s ease 0s, max-height 0s ease 0s;
}
header.fixed_hiding.scrolled .q_logo_hidden a{
max-height: 500px;
opacity: 1;
-webkit-transition: opacity 0.15s ease 0.3s, max-height 0.15s ease 0.2s;
-moz-transition: opacity 0.15s ease 0.3s, max-height 0.15s ease 0.2s;
-o-transition: opacity 0.15s ease 0.3s, max-height 0.15s ease 0.2s;
-ms-transition: opacity 0.15s ease 0.3s, max-height 0.15s ease 0.2s;
transition: opacity 0.15s ease 0.3s, max-height 0.15s ease 0.2s;
}
}
/* Main navigation styles
========================================================================== */
nav.main_menu{
position: absolute;
left: 50%;
z-index: 100;
text-align: left;
}
nav.main_menu.right{
position: relative;
left: auto;
float: right;
}
nav.main_menu ul {
list-style:none outside none;
margin:0px;
padding:0px;
}
nav.main_menu > ul {
left: -50%;
position: relative;
}
nav.main_menu.right > ul{
left: auto;
}
nav.main_menu ul li{
display:inline-block;
float:left;
padding:0px;
margin:0px;
background-repeat: no-repeat;
background-position: right;
}
nav.main_menu ul li a {
color: #777;
font-weight: 400;
text-decoration: none;
display: inline-block;
position: relative;
line-height: 100px;
padding: 0;
margin: 0;
cursor: pointer;
}
nav.main_menu > ul > li > a > i.menu_icon {
margin-right: 7px;
}
header.sticky nav.main_menu > ul > li > a,
.light.sticky nav.main_menu > ul > li > a,
.light.sticky nav.main_menu > ul > li > a:hover,
.light.sticky nav.main_menu > ul > li.active > a,
.dark.sticky nav.main_menu > ul > li > a,
.dark.sticky nav.main_menu > ul > li > a:hover,
.dark.sticky nav.main_menu > ul > li.active > a{
line-height: 60px;
}
nav.main_menu > ul > li > a,
nav.main_menu > ul > li > a {
display: inline-block;
height: 100%;
background-color: transparent;
-webkit-transition: opacity 0.3s ease-in-out, color 0.3s ease-in-out;
-moz-transition: opacity 0.3s ease-in-out, color 0.3s ease-in-out;
-o-transition: opacity 0.3s ease-in-out, color 0.3s ease-in-out;
-ms-transition: opacity 0.3s ease-in-out, color 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out, color 0.3s ease-in-out;
}
.with_hover_bg_color nav.main_menu > ul > li > a {
-webkit-transition: background-color 0 ease-in-out 0.15s, color 0 ease-in-out 0.15s;
-moz-transition: background-color 0 ease-in-out 0.15s, color 0 ease-in-out 0.15s;
-ms-transition: background-color 0 ease-in-out 0.15s, color 0 ease-in-out 0.15s;
-o-transition: background-color 0 ease-in-out 0.15s, color 0 ease-in-out 0.15s;
transition: background-color 0 ease-in-out 0.15s, color 0 ease-in-out 0.15s;
}
header:not(.with_hover_bg_color) nav.main_menu > ul > li:hover > a{
opacity: 0.8;
}
nav.main_menu>ul>li.active > a {
color: #303030;
}
nav.main_menu > ul > li > a > i.blank{
display: none;
}
nav.main_menu > ul > li.has_sub > a > i.q_menu_arrow {
display: inline-block;
margin-left: 6px;
}
.light:not(.sticky):not(.scrolled) nav.main_menu > ul > li > a,
.light:not(.sticky):not(.scrolled) nav.main_menu > ul > li > a:hover,
.light:not(.sticky):not(.scrolled) nav.main_menu > ul > li.active > a,
.light:not(.sticky):not(.scrolled) nav.main_menu > ul > li:before,
.light:not(.sticky):not(.scrolled) nav.main_menu > ul > li > a,
.light.header_style_on_scroll nav.main_menu > ul > li > a:hover,
.light.header_style_on_scroll nav.main_menu > ul > li.active > a,
.light.header_style_on_scroll nav.main_menu > ul > li:before{
color: #fff;
}
.dark:not(.sticky):not(.scrolled) nav.main_menu > ul > li > a,
.dark:not(.sticky):not(.scrolled) nav.main_menu > ul > li.active > a,
.dark:not(.sticky):not(.scrolled) nav.main_menu > ul > li:not(:first-child):before,
.dark.header_style_on_scroll nav.main_menu > ul > li > a,
.dark.header_style_on_scroll nav.main_menu > ul > li.active > a,
.dark.header_style_on_scroll nav.main_menu > ul > li:not(:first-child):before{
color: #000;
}
nav.main_menu > ul > li > a {
position: relative;
padding: 0 17px;
color: #9d9d9d;
text-transform: uppercase;
font-weight: 600;
font-size: 13px;
letter-spacing: 1px;
}
/* DROP DOWN MENU - START */
.drop_down ul{
list-style: none;
}
.drop_down ul li{
position: relative;
}
header.transparent.fixed.scrolled .drop_down .second,
header.transparent.fixed_hiding.scrolled .drop_down .second{
top: 100%;
}
.drop_down .second {
left: 0;
margin: 0;
top: 100%;
position: absolute;
display: block;
visibility: hidden;
overflow: hidden;
opacity: 0;
z-index: 10;
/*margin-top: 1px;*/
-webkit-transition: top 0.3s ease-in-out;
-moz-transition: top 0.3s ease-in-out;
-ms-transition: top 0.3s ease-in-out;
-o-transition: top 0.3s ease-in-out;
transition: top 0.3s ease-in-out;
}
header.transparent:not(.sticky) .drop_down .second {
top: 75%;
}
header.transparent.with_border:not(.sticky) .drop_down .second,
header.transparent.with_hover_bg_color:not(.sticky) .drop_down .second {
top: 100%;
}
.drop_down li.left_position .second{
left: auto;
right: 0px;
}
header.transparent .drop_down .second:not(.right) {
left: 16px;
}
header.transparent.with_hover_bg_color .drop_down .second:not(.right) {
left: 0;
}
.drop_down li.right_position .second {
left: -100%;
/*right: 0;*/
}
.drop_down .second.drop_down_start{
visibility: visible;
overflow: visible;
opacity: 1;
}
nav.main_menu > ul > li:hover > .second{
z-index: 20;
}
.drop_down .second .inner{
position: relative;
padding: 0px;
display: block;
z-index: 997;
}
.drop_down .second .inner > ul,
li.narrow .second .inner ul {
display:inline-block;
position: relative;
background-color: #262626;
border-color:#3d3d3d;
}
li.narrow .second .inner ul {
padding: 7px 0;
}
.drop_down .second .inner ul li {
display: block;
padding: 0 15px;
position: relative;
float: none;
height: auto;
background: 0;
width: 190px;
}
li.narrow .second .inner ul li:last-child {
border-bottom: none;
}
.drop_down .wide.left_position .second ul li,
.drop_down .wide.right_position .second ul li {
width: 180px;
}
.drop_down .second .inner ul li a,
.drop_down .second .inner ul li h5 {
display: block;
font-weight: 600;
color: #9d9d9d;
height: auto;
line-height: 16px;
margin: 0;
padding: 9px 0;
-webkit-transition: color 0.3s ease-in-out;
-moz-transition: color 0.3s ease-in-out;
-ms-transition: color 0.3s ease-in-out;
-o-transition: color 0.3s ease-in-out;
transition: color 0.3s ease-in-out;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 1px;
}
.drop_down .second .inner > ul > li:last-child > a,
.drop_down .second .inner > ul > li > ul > li:last-child > a,
.drop_down .second .inner > ul > li > ul > li > ul > li:last-child > a {
border-bottom: 0;
}
.drop_down .second .inner ul.right li a{
padding: 9px 20px 9px 0;
}
.drop_down .second .inner > ul > li > a:hover,
.drop_down .second .inner ul li.sub ul li a:hover{
color: #fff;
/*background-color: #474747;*/
}
.drop_down .narrow .second .inner ul li {
padding: 0;
width: 225px;
}
.drop_down .narrow .second .inner ul li a {
padding-left: 20px;
padding-right: 20px;
}
.drop_down .wide .second ul li a,
.drop_down .wide .second .inner ul li.sub a,
.drop_down .wide .second .inner ul li h5 {
background: 0;
}
.drop_down .second i {
display: none;
}
.drop_down .second .inner ul li ul{
position: absolute;
left: 100%;
top: -7px;
height: auto;
display: none;
overflow: hidden;
z-index: 10;
}
.drop_down .second .inner ul li:hover ul{
z-index: 20;
display: block;
}
.drop_down .second.right {
right: 0px;
left: auto;
}
.drop_down .second .inner ul.right li a,
.drop_down .second .inner ul.right li h5{
text-align: right;
}
.drop_down .second .inner ul.right li ul{
left: -100%;
}
.drop_down .second .inner ul li.sub ul li a,
.drop_down .second .inner ul.right li.sub ul li a{
background: none;
}
.drop_down .second .inner .widget{
padding: 0px 20px;
}
.drop_down .second .inner .widget p{
font-size: 13px;
line-height: 16px;
padding: 12px 0px;
}
/* DROP DOWN MENU - END */
/* DROP DOWN MENU WIDE - START */
.drop_down .wide .second ul{
padding: 15px 10px;
}
.drop_down .second ul li{
border-bottom-width: 1px;
border-bottom-color: #3d3d3d;
}
.drop_down .wide .second ul li{
float: left;
width: 249px;
padding: 0 10px 0 10px;
border-left: 1px solid #3d3d3d;
border-bottom: 0;
}
.drop_down .wide .second > .inner > ul > li.sub > ul > li > a,
.drop_down .wide .second ul li a {
padding: 11px 9px;
}
.drop_down .wide:not(.right_position) .second ul li:first-child,
.drop_down .wide.right_position .second ul li:last-child {
border-left-color: transparent;
}
.drop_down .wide .second ul li:last-child {
margin-right: 0;
}
.drop_down .wide.right_position .second ul li{
float: right;
}
.drop_down .wide .second ul li:hover{
background-color: transparent;
}
.drop_down .wide .second ul li:nth-child(4n+1){
clear: both;
}
.drop_down .second .inner ul li.sub a i.q_menu_arrow{
display: inline-block;
float: right;
position: relative;
top: 2px;
font-size: 12px;
color: #888;
}
.drop_down .second .inner ul li.sub ul li a i.q_menu_arrow,
.drop_down .wide .second .inner ul li.sub a i.q_menu_arrow {
display: none;
}
.drop_down .second .inner ul.right li.sub a i.q_menu_arrow{
float: left;
-ms-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-webkit-transform: rotate(180deg);
}
.drop_down .wide .second .inner > ul > li > a{
color: #fff;
border-bottom: 0;
text-transform: uppercase;
letter-spacing: 1px;
font-weight: 600;
}
.drop_down .wide .second .inner > ul > li > a{
margin-bottom: 7px;
font-size: 13px;
}
.drop_down .wide .second .inner ul li.sub h5 a,
.drop_down .wide .second .inner ul li h5 a{
padding: 0px !important;
}
.drop_down .wide .second ul li ul{
display: block;
left: 0;
padding: 0;
position: relative;
top: 0;
visibility: visible;
background-color: transparent !important;
}
.drop_down .wide .second ul li ul .widget{
padding:0 10px;
}
/* Wide drop down with full width background styles
========================================================================== */
.drop_down .wide.wide_background .second{
background-color: #262626;
}
.drop_down .wide.wide_background .second .inner{
text-align:center;
}
.drop_down .wide.wide_background .second .inner ul{
text-align:left;
}
.drop_down .wide.wide_background .second .inner {
text-align: center;
}
/* custom widget area in popup - start */
.drop_down .second .inner ul li ul{
overflow: visible;
}
.drop_down .wide .second ul li.show_widget_area_in_popup:hover .popup_wrapper > a{
color: #fff; /* this is added to style dynamic css also! */
}
.drop_down .wide .second ul li.show_widget_area_in_popup .popup_wrapper{
position: relative;
display: inline-block;
vertical-align: middle;
}
.drop_down .wide .second ul li.show_widget_area_in_popup a{
display: inline-block;
vertical-align: middle;
}
.drop_down .wide .second ul li.show_widget_area_in_popup .widget{
height: 0px;
width: 0px;
overflow: hidden;
opacity: 0;
position: absolute;
left: 100%;
top: 0px;
padding: 5px;
margin: 5px 0px 0px 5px;
background-color: #262626;
}
.drop_down .wide .second ul li ul li{
z-index: 1;
}
.drop_down .wide .second ul li.show_widget_area_in_popup:hover{
z-index: 10;
}
.drop_down .wide .second ul li.show_widget_area_in_popup:hover .widget{
height: auto;
width: auto;
opacity: 1;
}
.drop_down .wide .second ul li.show_widget_area_in_popup .widget img{
max-width: inherit;
display: block;
position: relative;
}
.drop_down .wide .second ul li.show_widget_area_in_popup .widget a{
padding: 0px;
}
/* custom widget area in popup - end */
.drop_down .wide .second ul li ul li{
padding: 0;
margin: 0;
border: 0;
}
.drop_down .wide .second ul li ul li.menu-item-has-children > a,
.drop_down .wide .second ul li ul li.menu-item-has-children > a:hover{
border-bottom: 0 none;
color: #303030;
font-size: 15px;
}
/* DROP DOWN MENU WIDE - END */
/* DROP DOWN MENU WIDE ICONS - START */
.drop_down .wide.icons .second ul li a span{
position: relative;
display: block;
}
.drop_down .wide.icons .second i{
width: 24px;
height: 16px;
float: left;
display: inline-block;
color: #888;
line-height: 16px;
-webkit-transition: color 0.3s ease-in-out;
-moz-transition: color 0.3s ease-in-out;
-ms-transition: color 0.3s ease-in-out;
-o-transition: color 0.3s ease-in-out;
transition: color 0.3s ease-in-out;
}
.drop_down .wide.icons .second a:hover i{
color: #fff;
}
.drop_down .wide.icons .second i.blank{
background: none;
border: 0px;
display:none;
}
/* DROP DOWN MENU WIDE ICONS - END */
/* Sticky with left and right menu - start */
@media only screen and (min-width: 1000px){
header.stick_with_left_right_menu:not(.sticky){
text-align: center;
}
.hide_inital_sticky header.stick_with_left_right_menu{
-ms-transform: translateY(-100%);
-webkit-transform: translateY(-100%);
transform: translateY(-100%);
}
.hide_inital_sticky header.stick_with_left_right_menu.sticky{
-ms-transform: none;
-webkit-transform: none;
transform: none;
}
header.stick_with_left_right_menu .header_inner_left{
display: inline-block;
vertical-align: middle;
position: relative;
top: 0px;
left: auto;
z-index: 100;
}
header.stick_with_left_right_menu.sticky .header_inner_left{
display: none;
}
header.stick_with_left_right_menu nav.main_menu.left_side{
text-align: right;
position: absolute;
width: 49%;
top: 0px;
left: 0px;
z-index: 50;
}
header.stick_with_left_right_menu nav.main_menu.left_side > ul{
text-align: left;
display: inline-block;
vertical-align: middle;
}
header.stick_with_left_right_menu nav.main_menu.right_side{
position: absolute;
width: 49%;
top: 0px;
right: 0px;
left: auto;
z-index: 50;
}
header.stick_with_left_right_menu nav.main_menu.left_side:hover,
header.stick_with_left_right_menu nav.main_menu.right_side:hover{
z-index: 200;
}
header.stick_with_left_right_menu.sticky nav.main_menu.left_side,
header.stick_with_left_right_menu.sticky nav.main_menu.right_side{
position: relative;
display: inline-block;
vertical-align: middle;
}
header.stick_with_left_right_menu.sticky nav.main_menu.left_side > ul > li:last-child,
header.stick_with_left_right_menu.sticky nav.main_menu.right_side > ul > li:first-child{
margin: 0px !important;
}
nav.main_menu.left_side > ul,
nav.main_menu.right_side > ul{
left: auto;
}
}
/* Sticky with left and right menu - end */
/* Fixed Minimal header type styles
========================================================================== */
.fixed_minimal .container_inner .header_inner_left,
.fixed_minimal .header_inner_left{
position:relative;
left:auto;
top:auto;
float:left;
}
.fixed_minimal .container_inner .logo_wrapper,
.fixed_minimal .logo_wrapper{
float:none;
position:absolute;
left:50%;
top:0;
}
@media only screen and (min-width: 1000px){
.fixed_minimal .q_logo a img{
-webkit-transform: translate(-50%, 0px);
-moz-transform: translate(-50%, 0px);
-ms-transform: translate(-50%, 0px);
-o-transform: translate(-50%, 0px);
transform: translate(-50%, 0px);
}
}
.fixed_minimal .popup_menu .line:after,
.fixed_minimal .popup_menu .line:before{
z-index:1;
}
.fixed_minimal .side_menu_button > a{
margin:0;
}
/* Fixed Minimal header type styles end
========================================================================== */
/* Fixed Top Header header type styles
========================================================================== */
.fixed_top_header .top_header{
background-color: #fff;
position:fixed;
z-index:110;
width:100%;
left:0;
top:0;
-webkit-backface-visibility: hidden;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.fixed_top_header .top_header .left{
float:left;
}
.fixed_top_header .top_header .right{
float:right;
}
.fixed_top_header .top_header nav.main_menu{
position:relative;
left:0;
}
.fixed_top_header .top_header nav.main_menu > ul{
left:0;
}
.fixed_top_header .header_inner_center{
text-align:center;
}
.fixed_top_header .logo_wrapper{
float:none;
padding:25px 0 25px 0;
}
.fixed_top_header .q_logo{
top:0;
}
.fixed_top_header .q_logo a{
display:inline-block;
vertical-align:middle;
}
.fixed_top_header .q_logo a img{
top: 0;
left:0;
-webkit-transform: translate(-50%, 0px);
-moz-transform: translate(-50%, 0px);
-ms-transform: translate(-50%, 0px);
-o-transform: translate(-50%, 0px);
transform: translate(-50%, 0px);
}
.fixed_top_header .side_menu_button,
.fixed_top_header .shopping_cart_inner,
.fixed_top_header .header_bottom_right_widget_holder{
height:45px;
}
.fixed_top_header nav.main_menu > ul > li > a{
line-height:45px;
}
.fixed_top_header.has_top .bottom_header{
padding-top: 45px;
}
.fixed_top_header .bottom_header{
background-color: #fff;
}
.fixed_top_header .header_bottom_center_widget{
padding-bottom:20px;
}
.fixed_top_header .top_header .header-widget{
float:left;
}
.fixed_top_header nav.mobile_menu{
background-color: #fff;
}
.fixed_top_header .qode_search_form_3 .qode_search_close{
font-size:25px;
}
.fixed_top_header .qode_search_form_3{
position:fixed;
left:0;
top:0;
}
.fixed_top_header .top_header > .left{
padding-left:45px;
}
.fixed_top_header .top_header > .right{
padding-right:45px;
}
.fixed_top_header .top_header .container_inner .left,
.fixed_top_header .top_header .container_inner .right{
padding-left:0;
padding-right:0;
}
.fixed_top_header.light .header_bottom_center_widget{
color: #fff;
}
.fixed_top_header.dark .header_bottom_center_widget{
color: #000;
}
header.fixed_top_header .top_header nav.main_menu > ul > li:first-child > a {
padding-left: 0;
}
/* Fixed Top Header header type styles end
========================================================================== */
.mobile_menu_button{
display: none;
float: left;
height: 100px;
margin: 0 20px 0 0;
}
.mobile_menu_button span {
color: #777;
width: 19px;
height: 17px;
font-size: 14px;
z-index: 50;
display: table-cell;
position: relative;
cursor: pointer;
vertical-align: middle;
}
.dark .mobile_menu_button span{
color: #000;
}
nav.mobile_menu{
display: none;
width: 100%;
float: left;
position: relative;
top: 0px;
text-align: left;
overflow: hidden;
background-color: #fff;
z-index: 100;
}
nav.mobile_menu ul{
display: none;
width: 100%;
position: relative;
list-style: none;
padding: 0;
margin: 0;
}
nav.mobile_menu > ul{
margin-bottom: -1px !important;
}
nav.mobile_menu ul li{
margin: 0px;
padding: 0px;
position: relative;
}
nav.mobile_menu ul li a{
-webkit-transition: all 0.2s ease;
-moz-transition: all 0.2s ease;
-o-transition: all 0.2s ease;
-webkit-tap-highlight-color: transparent;
}
nav.mobile_menu ul li,
nav.mobile_menu ul li,
nav.mobile_menu ul li ul li {
border-bottom: 1px solid #eaeaea;
}
nav.mobile_menu ul li.open_sub > ul {
border-top: 1px solid #eaeaea;
}
nav.mobile_menu ul li:last-child{
border: 0px !important;
}
nav.mobile_menu ul > li.has_sub > span.mobile_arrow,
nav.mobile_menu ul > li.has_sub > span.mobile_arrow {
cursor: pointer;
display: inline-block;
float: right;
height: 46px;
line-height: 46px;
margin: 0px;
padding: 0px 10px 0px 0px;
position: absolute;
top: 0px;
right: 0px;
text-align: right;
width: 50px;
z-index: 9000;
-webkit-tap-highlight-color: transparent;
}
nav.mobile_menu ul li span.mobile_arrow i,
nav.mobile_menu ul li span.mobile_arrow i{
color: #888;
}
nav.mobile_menu ul > li > span.mobile_arrow i{
display:none;
}
nav.mobile_menu ul > li.has_sub > span.mobile_arrow i{
display:inline;
}
nav.mobile_menu ul > li.has_sub > span.mobile_arrow i.fa-angle-down,
nav.mobile_menu ul > li.has_sub > span.mobile_arrow i.fa-angle-down{
display:none;
}
nav.mobile_menu ul > li.has_sub.open_sub > span.mobile_arrow i.fa-angle-right,
nav.mobile_menu ul > li.has_sub > ul.open_sub > li > span.mobile_arrow i.fa-angle-right{
display:none;
}
nav.mobile_menu ul > li.has_sub.open_sub > span.mobile_arrow i.fa-angle-down,
nav.mobile_menu ul > li.has_sub ul.open_sub > li > span.mobile_arrow i.fa-angle-down{
display:inline;
}
nav.mobile_menu ul li a,
nav.mobile_menu ul li h3{
font-size: 13px;
font-weight: 400;
color: #888;
padding: 10px 0px 10px 0;
display: block;
position: relative;
text-transform: none;
line-height: 26px;
letter-spacing: 0;
}
nav.mobile_menu ul li a:hover,
nav.mobile_menu ul li.active > a{
color: #1abc9c;
}
nav.mobile_menu ul li ul li{
margin: 0px 0px 0px 20px;
}
header:not(.centered_logo) .header_fixed_right_area {
position: absolute;
right: 0;
top: 0;
height: 100%;
line-height:100px;
}
.header_menu_bottom .main_menu{
left: auto;
}
.sticky .header_menu_bottom .main_menu{
float: right;
left: auto;
position: relative;
}
.sticky .header_menu_bottom .main_menu_header_inner_right_holder .main_menu{
float:left;
}
.sticky .header_menu_bottom .main_menu_header_inner_right_holder.with_center_logo .main_menu{
float:left;
}
.sticky .header_menu_bottom .main_menu_header_inner_right_holder{
float:right;
}
.header_menu_bottom nav.main_menu > ul{
left: auto;
}
.sticky .header_menu_bottom nav.main_menu > ul{
left: auto;
}
.side_menu_button_wrapper{
display: table;
}
.side_menu_button{
cursor: pointer;
display: table-cell;
vertical-align: middle;
height: 100px;
}
.header_bottom_right_widget_holder{
display: table-cell;
vertical-align: middle;
height: 100%;
padding:0 17px;
}
@media only screen and (min-width: 1000px){
header.dark:not(.sticky):not(.scrolled) .header_bottom_right_widget_holder a.qbutton,
header.dark.header_style_on_scroll .header_bottom_right_widget_holder a.qbutton{
border-color:#000 !important;
background-color: transparent !important;
color:#000 !important;
}
header.light:not(.sticky):not(.scrolled) .header_bottom_right_widget_holder a.qbutton,
header.light.header_style_on_scroll .header_bottom_right_widget_holder a.qbutton{
border-color:#fff !important;
background-color: transparent !important;
color:#fff !important;
}
}
/*header.has_woocommerce_dropdown .side_menu_button > a {
top: -8px;
}*/
.side_menu_button > a {
font-size: 14px;
position: relative;
display: inline;
width: 20px;
height: 20px;
padding:0 12px;
}
.side_menu_button > a.side_menu_button_link.medium {
display: inline-block;
font-size: 21px;
line-height: 30px;
height: 30px;
width: 19px;
}
.side_menu_button > a.side_menu_button_link.large {
display: inline-block;
font-size: 28px;
line-height: 34px;
height: 34px;
width: 24px;
}
.side_menu_button > a,
.mobile_menu_button span {
-webkit-transition: opacity 0.3s ease;
-moz-transition: opacity 0.3s ease;
-ms-transition: opacity 0.3s ease;
-o-transition: opacity 0.3s ease;
color: #9d9d9d;
}
.side_menu_button > a:hover,
.mobile_menu_button span:hover {
opacity: 0.8;
}
.light:not(.sticky):not(.scrolled) .header-widget .q_social_icon_holder i.simple_social,
.light:not(.sticky):not(.scrolled) .header-widget,
.light:not(.sticky):not(.scrolled) .header-widget.widget_nav_menu ul.menu > li > a,
.light:not(.sticky):not(.scrolled) .header-widget p,
.light:not(.sticky):not(.scrolled) .header-widget a,
.light:not(.sticky):not(.scrolled) .header-widget span,
.light.header_style_on_scroll .header-widget .q_social_icon_holder i.simple_social,
.light.header_style_on_scroll .header-widget,
.light.header_style_on_scroll .header-widget.widget_nav_menu ul.menu > li > a,
.light.header_style_on_scroll .header-widget p,
.light.header_style_on_scroll .header-widget a,
.light.header_style_on_scroll .header-widget span{
color:#fff;
}
.light:not(.sticky):not(.scrolled) .header-widget .q_social_icon_holder i.simple_social,
.light:not(.sticky):not(.scrolled) .header-widget #lang_sel > ul > li > a,
.light:not(.sticky):not(.scrolled) .header-widget #lang_sel_click > ul > li> a,
.light.header_style_on_scroll .header-widget .q_social_icon_holder i.simple_social,
.light.header_style_on_scroll .header-widget #lang_sel > ul > li > a,
.light.header_style_on_scroll .header-widget #lang_sel_click > ul > li> a{
color:#fff !important;
}
.dark:not(.sticky):not(.scrolled) .q_social_icon_holder i.simple_social,
.dark:not(.sticky):not(.scrolled) .header-widget,
.dark:not(.sticky):not(.scrolled) .header-widget.widget_nav_menu ul.menu > li > a,
.dark:not(.sticky):not(.scrolled) .header-widget p,
.dark:not(.sticky):not(.scrolled) .header-widget a,
.dark:not(.sticky):not(.scrolled) .header-widget span,
.dark.header_style_on_scroll .q_social_icon_holder i.simple_social,
.dark.header_style_on_scroll .header-widget,
.dark.header_style_on_scroll .header-widget.widget_nav_menu ul.menu > li > a,
.dark.header_style_on_scroll .header-widget p,
.dark.header_style_on_scroll .header-widget a,
.dark.header_style_on_scroll .header-widget span{
color:#000;
}
.dark:not(.sticky):not(.scrolled) .header-widget .q_social_icon_holder i.simple_social,
.dark:not(.sticky):not(.scrolled) .header-widget #lang_sel > ul > li > a,
.dark:not(.sticky):not(.scrolled) .header-widget #lang_sel_click > ul > li> a,
.dark.header_style_on_scroll .header-widget .q_social_icon_holder i.simple_social,
.dark.header_style_on_scroll .header-widget #lang_sel > ul > li > a,
.dark.header_style_on_scroll .header-widget #lang_sel_click > ul > li> a{
color:#000 !important;
}
.side_menu_button a:last-child{
padding: 0px 0px 0px 8px;
}
.header_inner_right.left_side .side_menu_button a:last-child{
padding: 0px;
}
header.sticky .header_inner_right.left_side{
display:none;
}
.side_menu .q_font_awsome_icon .qode_icon_element
{
color:#818181;
-webkit-transition: color 0.3s ease-in-out;
-moz-transition: color 0.3s ease-in-out;
-o-transition: color 0.3s ease-in-out;
-ms-transition: color 0.3s ease-in-out;
transition: color 0.3s ease-in-out;
margin:0 8px 0 0;
-webkit-backface-visibility: visible; /* fix the problem with boxed background on Chrome */
}
.side_menu li:hover .q_font_awsome_icon .qode_icon_element{
color:#fff;
}
.q_slider {
width: 100%;
overflow: hidden;
position: relative;
z-index: 10;
}
.ls-wp-fullwidth-helper {
left: 0px !important;
}
/*.content{
margin-top: 0;
position: relative;
z-index: 100;
background-color: #f6f6f6;
}
.content.content_top_margin{
margin-top: 100px !important;
}
.content.content_top_margin_none{
margin-top: 0 !important;
}*/
.container{
position: relative;
padding: 0;
width: 100%;
z-index:100;
}
.container_inner{
width: 1100px;
margin: 0px auto;
}
/*.content .container {
background-color: #f6f6f6;
}
.content .container .container_inner{
padding:0px 0px 0px 0px;
}
.content .container .container_inner.page_container_inner{
padding:30px 0px 0px 0px;
}*/
.full_page_container_inner{
padding:30px 0px 0px 0px;
}
.full_width{
position: relative;
z-index: 100;
background-color: #f6f6f6;
}
.header_bottom .container_inner{
position: relative;
}
/*.content .title .container_inner{
padding: 0px !important;
}*/
section.section{
display: block;
position: relative;
padding: 50px 0;
overflow: hidden;
}
div.section{
position:relative;
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
}
.use_row_as_box{
-moz-border-radius:4px;
-webkit-border-radius:4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius:4px;
}
.vc_row.disable_negative_margin {
margin-left: 0;
margin-right: 0;
}
div.video_section{
overflow: hidden;
}
.boxed .section .section_inner,
.grid_section .section_inner{
width: 1100px;
margin: 0px auto;
position: relative;
z-index: 20;
}
.full_section_inner{
position: relative;
z-index: 20;
}
/* Section Video Background - Start */
.section .mobile-video-image {
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
display: none;
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
z-index: 10;
}
.section .video-overlay {
height: 3000px;
left: 0;
opacity: 0;
position: absolute;
top: 0;
width: 100%;
z-index: 11;
}
.section .video-overlay.active {
background-image: url("img/pixel-video.png");
background-position: 0px 0px;
background-repeat: repeat;
opacity: 1;
}
.section .video-wrap {
top: 0px;
left: 0px;
overflow: hidden;
position: absolute;
width: 100%;
z-index: 10;
}
.section .video-wrap .mejs-poster {
background-size: cover!important;
-moz-background-size: cover!important;
-webkit-background-size: cover!important;
-o-background-size: cover!important;
}
.section .video-wrap .mejs-container .mejs-controls {
display: none!important;
}
.section .video-wrap .mejs-controls .mejs-button button:focus {
outline: none!important;
}
.section .video-wrap .mejs-controls .mejs-time-rail .mejs-time-loaded {
background-color: rgba(255, 255, 255, 0.18) !important;
}
.section .video-wrap .mejs-container {
background-color: transparent!important;
background-image: none!important;
height: auto !important;
}
.section .video-wrap .mejs-mediaelement{
background: none !important;
border: 0px !important;
}
.section .video-wrap .mejs-container .mejs-poster img {
max-width: none!important;
width: 100%!important;
}
.section .video-wrap .mejs-controls button { opacity: 0.8; }
.section .video-wrap .mejs-controls button:hover, .mejs-controls .mejs-fullscreen-button:hover button { opacity: 1!important;}
.section .video-wrap .mejs-controls .mejs-time-rail .mejs-time-total {
background: #1f1f1f none repeat scroll 0 0 !important;
}
.section .video-wrap .mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current {
background: transparent!important;
}
/* Section Video Background - End */
.two_columns_66_33{
width: 100%;
}
.two_columns_66_33>.column1{
width: 66.66%;
float: left;
}
.two_columns_66_33>.column1>.column_inner{
padding: 0 20px 0 0;
}
.two_columns_66_33>.column2{
width: 33.33%;
float: left;
}
.two_columns_66_33>.column2>.column_inner{
padding: 0 0 0 20px;
}
.two_columns_33_66{
width: 100%;
}
.two_columns_33_66>.column1{
width: 33.33%;
float: left;
}
.two_columns_33_66>.column1>.column_inner{
padding: 0 20px 0 0;
}
.two_columns_33_66>.column2{
width: 66.66%;
float: left;
}
.two_columns_33_66>.column2>.column_inner{
padding: 0 0 0 20px;
}
.two_columns_75_25{
width: 100%;
}
.two_columns_75_25>.column1{
width: 75%;
float: left;
}
.two_columns_75_25>.column1>.column_inner{
padding: 0 20px 0 0;
}
.two_columns_75_25>.column2{
width: 25%;
float: left;
}
.two_columns_75_25>.column2>.column_inner{
padding: 0 0 0 20px;
}
.two_columns_25_75 {
width: 100%;
}
.two_columns_25_75>.column1{
width: 25%;
float: left;
}
.two_columns_25_75>.column1>.column_inner{
padding: 0 20px 0 0;
}
.two_columns_25_75>.column2{
width: 75%;
float: left;
}
.two_columns_25_75>.column2>.column_inner{
padding: 0 0 0 20px;
}
.two_columns_50_50 {
width: 100%;
}
.two_columns_50_50>.column1{
width: 50%;
float: left;
}
.two_columns_50_50>.column1>.column_inner{
padding: 0 10px 0 0;
}
.two_columns_50_50>.column2{
width: 50%;
float: left;
}
.two_columns_50_50>.column2>.column_inner{
padding: 0 0 0 10px;
}
.three_columns {
width: 100%;
}
.three_columns>.column1,
.three_columns>.column2,
.three_columns>.column3{
width: 33.33%;
float: left;
}
.three_columns>.column1>.column_inner{
padding: 0 15px 0 0;
}
.three_columns>.column2>.column_inner{
padding: 0 5px 0 10px;
}
.three_columns>.column3>.column_inner{
padding: 0 0 0 15px;
}
.four_columns{
width: 100%;
}
.four_columns>.column1,
.four_columns>.column2,
.four_columns>.column3,
.four_columns>.column4{
width: 25%;
float: left;
}
.four_columns>.column1>.column_inner{
padding: 0 15px 0 0;
}
.four_columns>.column2>.column_inner{
padding: 0 10px 0 5px;
}
.four_columns>.column3>.column_inner{
padding: 0 5px 0 10px;
}
.four_columns>.column4>.column_inner{
padding: 0 0 0 15px;
}
.five_columns>.column1,
.five_columns>.column2,
.five_columns>.column3,
.five_columns>.column4,
.five_columns>.column5{
width: 20%;
float: left;
}
.five_columns>.column1>.column_inner,
.five_columns>.column2>.column_inner,
.five_columns>.column3>.column_inner,
.five_columns>.column4>.column_inner{
margin: 0 2.5% 0 0;
}
.five_columns>.column5>.column_inner{
margin: 0;
}
.title_outer.animate_title_area{
overflow: hidden;
}
/*.title{
display: block;
width: 100%;
height: 100px;
text-align: left;
position: relative;
z-index: 101;
border-bottom-color:#eee;
}*/
.title_outer.with_image .title{
height: auto !important;
line-height: normal;
background: none;
}
.title img{
display: block;
position: relative;
width: 100%;
}
.title .not_responsive{
display: none;
}
.title .title_holder{
display: table;
height: 100%;
left: 0;
position: relative;
width: 100%;
}
.title_outer.with_image .title .title_holder,
.title_outer .has_fixed_background.title .title_holder,
.title_outer .has_background.title .title_holder {
position: absolute;
top: 0%;
display:block;
}
.title .title_overlay{
position: absolute;
width: 100%;
height: 100%;
background-repeat: repeat;
background-position: 0px 0px;
top: 0;
}
.title .title_holder .container{
display: table-cell;
vertical-align: middle;
background-color: transparent;
}
.title_outer.with_image .title .title_holder .container,
.title_outer .has_fixed_background.title .title_holder .container,
.title_outer .has_background.title .title_holder .container
{
display:block;
height: 100%;
}
.content .title_outer.with_image .title .container_inner,
.title_outer .has_fixed_background.title .title_holder .container_inner,
.title_outer .has_background.title .title_holder .container_inner
{
display: table;
height: 100%;
}
.title_subtitle_holder{
display: block;
padding: 0px;
position:relative;
}
.title_outer.with_image .title .title_subtitle_holder,
.title_outer .has_fixed_background.title .title_subtitle_holder,
.title_outer .has_background.title .title_subtitle_holder
{
display: table-cell;
vertical-align: middle;
width: 100%;
}
.title_subtitle_holder_inner {
position: relative;
}
.title h1{
color: #303030;
padding: 0px;
text-transform:uppercase;
letter-spacing:1px;
font-weight: 600;
}
.title.title_size_medium h1{
font-size: 24px;
line-height: 1.384615384615385em;
}
.title.title_size_small h1,
.title h1
{
font-size: 17px;
line-height: 1.304347826086957em;
}
.title.title_size_large h1{
font-size: 47px;
line-height: 60px;
}
.title_text_shadow .title h1{
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.4);
}
.subtitle{
display:block;
}
.title_text_shadow .subtitle{
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.4);
}
.animate_title_text .title h1{
-webkit-animation: title-from-right .5s 1 cubic-bezier(0.175, 0.885, 0.320, 1.275) 1s;
-moz-animation: title-from-right .5s 1 cubic-bezier(0.175, 0.885, 0.320, 1.275) 1s;
-o-animation: title-from-right .5s 1 cubic-bezier(0.175, 0.885, 0.320, 1.275) 1s;
animation: title-from-right .5s 1 cubic-bezier(0.175, 0.885, 0.320, 1.275) 1s;
-webkit-animation-fill-mode: both;
-moz-animation-fill-mode: both;
-ms-animation-fill-mode: both;
-o-animation-fill-mode: both;
animation-fill-mode: both;
visibility: visible;
}
@-webkit-keyframes title-from-right {
0% {
filter: alpha(opacity=0);
opacity: 0;
-webkit-transform: translate(50%, 0);
}
100% {
filter: alpha(opacity=100);
opacity: 1;
-webkit-transform: translate(0, 0);
}
}
@-moz-keyframes title-from-right {
0% {
filter: alpha(opacity=0);
opacity: 0;
-moz-transform: translate(50%, 0);
}
100% {
filter: alpha(opacity=100);
opacity: 1;
-moz-transform: translate(0, 0);
}
}
@-o-keyframes title-from-right {
0% {
filter: alpha(opacity=0);
opacity: 0;
-o-transform: translate(50%, 0);
}
100% {
filter: alpha(opacity=100);
opacity: 1;
-o-transform: translate(0, 0);
}
}
@keyframes title-from-right {
0% {
filter: alpha(opacity=0);
opacity: 0;
transform: translate(50%, 0);
}
100% {
filter: alpha(opacity=100);
opacity: 1;
transform: translate(0, 0);
}
}
.position_center.title .title_subtitle_holder{
text-align:center;
}
.position_right.title .title_subtitle_holder{
text-align:right;
}
.position_right .breadcrumb{
left:0;
right: auto;
}
.title.has_background {
background-repeat: no-repeat;
background-position: center 0;
}
.title.has_fixed_background {
background-repeat: no-repeat;
background-attachment: fixed;
background-position: center 0;
position: relative;
z-index: 101;
}
.breadcrumb{
position:absolute;
height:100%;
font-size:13px;
top:0;
right:0;
color:#303030;
}
.breadcrumbs{
display:table;
height:100%;
width:100%;
line-height: 1em;
}
.breadcrumbs .breadcrumbs_inner{
display:table-cell;
vertical-align:middle;
}
.title_text_shadow .breadcrumbs .breadcrumbs_inner{
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.4);
}
.position_center.title .breadcrumb{
position:relative;
text-align:center;
}
.title .separator.small,
.title .separator.small.left,
.title .separator.small.right
{
margin-top: 14px;
margin-bottom: 10px;
}
.title_border_in_grid_holder{
height: 1px;
width: 1100px;
margin: 0 auto;
background-color: #eee;
}
.breadcrumb .current{
color:#303030;
}
.breadcrumb a{
color:#303030;
}
.breadcrumb a:hover{
color:#1abc9c;
}
.touch .title.has_fixed_background {
background-attachment: scroll;
}
.box_image_with_border{
display: block;
position: relative;
border-bottom: 5px solid #dddddd;
-webkit-transition: all .4s ease-out 0s;
-moz-transition: all .4s ease-out 0s;
-o-transition: all .4s ease-out 0s;
-ms-transition: all .4s ease-out 0s;
text-align: center;
}
.box_image_with_border:hover{
border-color: #1abc9c;
}
.box_image_with_border h3{
margin: 0 0 15px;
}
.box_image_holder{
display: block;
position: relative;
margin: 0 0 56px;
text-align: left;
}
.box_image_holder a{
position: relative;
display: block;
}
.box_image_holder .box_image_shadow{
display: block;
position: absolute;
bottom: -8px;
left: 0;
width: 100%;
height: 100%;
background-image: url('img/box_image_shadow.png');
background-repeat: no-repeat;
background-position: center bottom;
background-size: 100% 30px;
-webkit-background-size: 100% 30px;
-moz-background-size: 100% 30px;
-o-background-size: 100% 30px;
-webkit-transition: all .4s ease-out 0s;
-moz-transition: all .4s ease-out 0s;
-o-transition: all .4s ease-out 0s;
-ms-transition: all .4s ease-out 0s;
}
.box_image_with_border:hover .box_image_shadow{
bottom: -13px;
opacity: 0.2;
filter: alpha(opacity=20);
}
.box_image_holder .image_holder_inner{
position: relative;
display: inline-block;
width: 100%;
top: 0px;
left: 0px;
-webkit-transition: all .4s ease-out 0s;
-moz-transition: all .4s ease-out 0s;
-o-transition: all .4s ease-out 0s;
-ms-transition: all .4s ease-out 0s;
}
.box_image_with_border:hover .box_image_holder .image_holder_inner{
top: -15px;
}
.box_image_holder img{
width: 100%;
}
.box_image_holder .box_icon{
display: inline-block;
position: absolute;
left: 50%;
bottom: 0px;
-webkit-transform: translateZ(0px);
-moz-transform: translateZ(0px);
}
.box_image_holder .box_icon .fa-stack{
margin: 0 0 0 -50%;
font-size: 4em;
}
.box_image_holder .box_icon .fa-stack i{
margin: 35% 0 0;
}
.box_image_holder .box_icon .fa-stack i.fa-stack-base {
color: #1abc9c;
}
.separator {
position: relative;
display: block;
height: 1px;
background-color: #eaeaea;
margin: 10px 0;
}
.separator.transparent {
background-color: transparent;
}
.separator.small {
background-color: #303030;
height: 2px;
position: relative;
width: 22px;
display: block;
margin: 10px auto 20px auto;
}
.wpb_column > .wpb_wrapper .separator.small {
margin-bottom: 20px;
}
.separator.small.left {
margin: 10px 0 20px 0;
}
.separator.small.right {
margin: 10px 0 20px auto;
}
/* ==========================================================================
Icon list shortcode styles
========================================================================== */
.q_icon_list {
margin-bottom: 21px;
}
.q_icon_list p{
font-size: 15px;
line-height: 27px;
font-weight: 400;
margin: 0 0 10px;
padding: 0 0 0 38px;
position: relative;
color: #303030;
}
.q_icon_list i {
background-color: #1abc9c;
color: #fff;
font-size: 18px;
line-height: 27px;
height: 27px;
width: 27px;
text-align: center;
border-radius: 2em;
-webkit-border-radius: 2em;
-moz-border-radius: 2em;
-o-border-radius: 2em;
}
.q_icon_list i.transparent {
background: transparent;
border: 0;
color: #ababab;
}
/* ==========================================================================
Progress bar shortcode start styles
========================================================================== */
.q_progress_bar {
position: relative;
margin: 0 0 28px 0;
width: 100%;
overflow: hidden;
text-align: left;
}
.q_progress_bar .progress_content_outer{
background-color: #e3e3e3;
position: relative;
overflow: hidden;
height: 13px;
}
.q_progress_bar .progress_content{
position: absolute;
top: 0;
left: 0;
max-width: 100%;
overflow: hidden;
background-color: #1abc9c;
height: 13px;
box-sizing: border-box;
}
.q_progress_bar .progress_title_holder {
position: relative;
margin: 0 0 7px 0;
}
.q_progress_bar .progress_title {
display: inline-block;
z-index: 100;
}
.q_progress_bar .progress_number_wrapper {
text-align: right;
position: absolute;
left: 0px;
z-index: 10;
opacity: 0;
filter: alpha(opacity=0);
color: #fff;
}
.q_progress_bar .progress_number {
position: absolute;
right: 0;
font-size: 18px;
font-weight: 500;
top: -1px;
}
/* ==========================================================================
Progress bar shortcode end styles
========================================================================== */
/* ==========================================================================
Vertical progress bar shortcode start styles
========================================================================== */
.q_progress_bars_vertical .progress_content_outer {
height: 200px;
position: relative;
background-color: #e3e3e3;
}
.q_progress_bars_vertical .progress_number {
font-size: 18px;
line-height: 1em;
color: #303030;
display: block;
position: relative;
font-weight: 500;
margin-bottom: 14px;
}
.q_progress_bars_vertical .progress_title {
margin-bottom: 0.7777777777777778em;
margin-top: 1em;
}
.q_progress_bars_vertica .progress_text {
display: inline-block;
line-height: 18px;
}
.q_progress_bars_vertical .progress_content_outer .progress_content {
display: inline-block;
width: 100%;
position: absolute;
bottom: 0;
left: 0px;
background-color: #1abc9c;
box-sizing: border-box;
}
/* ==========================================================================
Vertical progress bar shortcode end styles
========================================================================== */
/* ==========================================================================
Counter shortcode start styles
========================================================================== */
.q_counter_holder {
display: block;
opacity: 0;
filter: alpha(opacity=0);
-webkit-transition: opacity .4s ease 0s;
-moz-transition: opacity .4s ease 0s;
-o-transition: opacity .4s ease 0s;
padding: 20px 0;
}
.q_counter_holder.boxed_counter {
border: 1px solid #eaeaea;
padding: 20px 40px;
background-color:#fff;
}
.q_counter_holder.left {
text-align: left;
}
.q_counter_holder.right {
text-align: right;
}
.q_counter_holder.center {
text-align: center;
padding: 20px 40px;
}
.q_counter_holder span.counter {
font-size: 60px;
line-height: 1em;
font-weight: 300;
color: #1abc9c;
display: inline-block !important;
height: 1em;
}
.q_counter_holder p.counter_text {
font-weight: 600;
text-transform: uppercase;
letter-spacing:1px;
margin: 12px 0 0 00;
}
.q_counter_holder .separator.small {
background-color: #eaeaea;
margin: 19px auto 0px auto;
}
.q_counter_holder.left .separator.small {
margin-left: 0;
margin-right: auto;
}
.q_counter_holder.right .separator.small {
margin-left: auto;
margin-right: 0;
}
/* ==========================================================================
Counter shortcode end styles
========================================================================== */
/* ==========================================================================
Box Holder shortcode start styles
========================================================================== */
.q_box_holder{
display: block;
position: relative;
border: 1px solid transparent;
z-index: 200;
}
.q_box_holder.with_icon{
border: 2px solid #c0c0c0;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
}
.box_holder_inner{
padding: 30px 20px;
display: block;
}
.q_box_holder.with_icon .box_holder_inner.tiny{
padding: 37px 20px 30px;
}
.q_box_holder.with_icon .box_holder_inner.small{
padding: 45px 20px 30px;
}
.q_box_holder.with_icon .box_holder_inner.medium{
padding: 58px 20px 30px;
}
.q_box_holder.with_icon .box_holder_inner.large{
padding: 71px 20px 30px;
}
.q_box_holder.with_icon .box_holder_inner.very_large{
padding: 85px 20px 30px;
}
.box_holder_inner.left{
text-align: left;
}
.box_holder_inner.right{
text-align: right;
}
.box_holder_inner.center{
text-align: center;
}
.box_holder_icon{
position: absolute;
display: block;
left: 50%;
top: 0;
z-index: 250;
}
.box_holder_icon_inner{
margin: -50% 0 0 -50%;
}
.box_holder_icon_inner.circle,
.box_holder_icon_inner.square,
.box_holder_icon_inner.image{
margin: -50% 0 0 -50%;
}
.box_holder_icon_inner.circle .fa-stack,
.circle .icon_holder .fa-stack{
-o-border-radius: 2em;
-moz-border-radius: 2em;
-webkit-border-radius: 2em;
-ms-border-radius: 2em;
border-radius: 2em;
}
.box_holder_icon .fa-stack i{
color: #1abc9c;
}
.box_holder_icon_inner.tiny i.fa-circle{
font-size: 40px;
}
.box_holder_icon_inner.image.tiny img{
height: 35px;
}
.box_holder_icon_inner.image.small img{
height: 52px;
}
.box_holder_icon_inner.image.medium img{
height: 78px;
}
.box_holder_icon_inner.image.large img{
height: 104px;
}
.box_holder_icon_inner.image.very_large img{
height: 130px;
}
/* ==========================================================================
Box Holder shortcode end styles
========================================================================== */
/* ==========================================================================
Button shortcode start styles
========================================================================== */
.qbutton,
.load_more a,
.blog_load_more_button a,
#submit_comment,
.drop_down .wide .second ul li .qbutton,
.drop_down .wide .second ul li ul li .qbutton {
position: relative;
display: inline-block;
width: auto;
height: 39px;
line-height: 39px;
margin: 0;
padding: 0px 23px;
border: 2px solid #303030;
font-size: 13px;
font-weight: 700;
font-family: inherit;
text-align: left;
color: #303030;
text-decoration: none;
cursor: pointer;
white-space: nowrap;
outline: none;
font-style: normal;
text-transform: uppercase;
letter-spacing: 1px;
-o-border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
-ms-border-radius: 4px;
border-radius: 4px;
text-shadow: none;
background-color: transparent;
-webkit-transition: color 0.1s linear, background-color 0.1s linear,border-color 0.1s linear;
-moz-transition: color 0.1s linear, background-color 0.1s linear,border-color 0.1s linear;
-ms-transition: color 0.1s linear, background-color 0.1s linear,border-color 0.1s linear;
-o-transition: color 0.1s linear, background-color 0.1s linear,border-color 0.1s linear;
transition: color 0.1s linear, background-color 0.1s linear,border-color 0.1s linear;
-webkit-box-sizing: initial !important;
-moz-box-sizing: initial !important;
box-sizing: initial !important;
}
input.qbutton {
line-height: 36px;
}
.qbutton:hover,
.load_more a:hover,
.blog_load_more_button a:hover,
#submit_comment:hover,
.drop_down .wide .second ul li .qbutton:hover,
.drop_down .wide .second ul li ul li .qbutton:hover{
background-color: #1abc9c;
border-color: #1abc9c;
color: #fff;
text-decoration: none;
}
.qbutton.left {
text-align: left;
}
.qbutton.right {
text-align: right;
}
.qbutton.center {
text-align: center;
}
/* Button sizes styles
========================================================================== */
.qbutton.big_large{
height: 58px;
line-height: 58px;
font-size: 20px;
padding: 0 22px;
}
.qbutton.big_large_full_width{
width:100%;
height: 90px;
line-height: 90px;
font-size: 20px;
padding:0;
text-align: center;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
}
.qbutton.large {
height: 47px;
line-height: 47px;
font-size: 16px;
padding: 0px 29px;
}
.qbutton.small {
height: 30px;
line-height: 30px;
font-size: 12px;
padding:0 17px;
}
/* Button color styles
========================================================================== */
.qbutton.white {
border-color: #fff;
color:#fff;
}
.qbutton.white:hover {
background-color: #1abc9c;
border-color: #1abc9c;
}
.qbutton.green {
border-color: #1abc9c;
color:#fff;
background-color: #1abc9c;
}
.qbutton.green:hover {
background-color: #fff;
border-color: #fff;
color: #a2a2a2;
}
/* Button with icon styles
========================================================================== */
.qbutton i {
margin: 0 0 0 10px;
}
.qbutton.large i {
margin: 0 0 0 17px;
}
.qbutton.medium i {
margin: 0 0 0 15px;
}
.qbutton.small i {
margin: 0 0 0 10px;
}
.qbutton.tiny i {
margin: 0 0 0 8px;
}
.qbutton.big_large i,
.qbutton.big_large_full_width i {
margin: 0 0 0 19px;
}
/* Button usage custom styles
========================================================================== */
#submit_comment,
.load_more.tiny a {
height: 39px;
line-height: 39px;
font-size: 12px;
padding: 0px 18px;
}
#submit_comment {
line-height: 36px;
}
/* ==========================================================================
Button end styles
========================================================================== */
/* ==========================================================================
Pie Charts and Pie Charts With Icon start styles
========================================================================== */
.easyPieChart {
position: relative;
}
.easyPieChart canvas {
position: absolute;
top: 0;
left: 0;
}
.q_pie_chart_holder,
.q_pie_chart_with_icon_holder{
display: block;
margin: 0 0 30px;
opacity: 0;
filter: alpha(opacity=0);
-webkit-transition: opacity .3s ease 0s;
-moz-transition: opacity .3s ease 0s;
-o-transition: opacity .3s ease 0s;
}
.q_percentage {
font-size: 35px;
font-weight: 500;
color: #303030;
text-align: center;
margin: 0 auto;
opacity: 0;
filter: alpha(opacity=0);
-webkit-transition: opacity .3s ease 0s;
-moz-transition: opacity .3s ease 0s;
-o-transition: opacity .3s ease 0s;
}
.q_percentage_with_icon{
color: #1abc9c;
text-align: center;
margin: 0 auto;
opacity: 0;
filter: alpha(opacity=0);
-webkit-transition: opacity .3s ease 0s;
-moz-transition: opacity .3s ease 0s;
-o-transition: opacity .3s ease 0s;
-webkit-backface-visibility: hidden;
}
.q_pie_chart_holder .tocounter{
float: none;
margin: 0;
}
.q_percentage_with_icon i{
float: none;
margin: 0;
vertical-align: middle !important;
color: #b9b9b9;
}
.q_pie_chart_holder .pie_chart_text,
.q_pie_chart_with_icon_holder .pie_chart_text{
text-align: center;
margin: 28px 0 0;
}
.q_pie_chart_holder .pie_chart_text .pie_title,
.q_pie_chart_with_icon_holder .pie_chart_text .pie_title{
margin: 0 0 0.35em;
}
.q_pie_chart_holder .separator.small {
background-color: #eaeaea;
margin: 10px auto 12px auto;
}
/* ==========================================================================
Pie Charts and Pie Charts With Icon end styles
========================================================================== */
/* ==========================================================================
Image With Text start styles
========================================================================== */
.image_with_text {
display: inline-block;
width: 100%;
position: relative;
}
.image_with_text img {
display: block;
margin: 0 0 22px 0;
}
/* ==========================================================================
Image With Text end styles
========================================================================== */
/* ==========================================================================
Call to action styles
========================================================================== */
.call_to_action {
position: relative;
display: block;
padding: 51px 21px;
background-color: #1abc9c;
}
.call_to_action .two_columns_75_25 {
position: relative;
}
.call_to_action .text_wrapper {
position:relative;
}
.call_to_action .text_wrapper .call_to_action_text {
color: #fff;
letter-spacing: 1px;
font-size: 22px;
font-weight: 500;
}
.call_to_action.with_icon .text_wrapper .call_to_action_text {
padding:0 0 0 54px;
line-height: 1em;
}
.call_to_action .text_wrapper .call_to_action_icon_holder{
position:absolute;
height:100%;
}
.call_to_action .text_wrapper .call_to_action_icon{
display:table;
height:100%;
}
.call_to_action .text_wrapper .call_to_action_icon_inner {
display:table-cell;
height:100%;
vertical-align:middle;
}
.call_to_action .text_wrapper .call_to_action_icon_inner i {
color: #fff;
}
.call_to_action .column2.button_wrapper {
text-align: right;
}
.call_to_action .column2.button_wrapper .qbutton{
position:absolute;
right:0;
top:50%;
margin:-21px 0 0 0;
}
.call_to_action .column2.button_wrapper .qbutton.small{
margin-top:-17px;
}
.call_to_action .column2.button_wrapper .qbutton.large{
margin-top:-25px;
}
.call_to_action .column2.button_wrapper .qbutton.big_large{
margin-top:-31px;
}
/* ==========================================================================
Parallax shortcode styles
========================================================================== */
.full_width .parallax_content{
width: 1100px;
margin: 0px auto;
}
section.section section.parallax{
margin: -50px 0px;
}
.boxed section.section section.parallax{
margin: -50px -25px;
}
.boxed .full_width .parallax_content{
width: auto;
margin: 0px;
padding: 0px 25px;
}
section.parallax_section_holder{
position: static;
padding: 0px;
background-repeat: no-repeat;
background-color: transparent;
background-position: center 0px;
background-attachment: fixed;
overflow: hidden;
}
.parallax_content,
.parallax_content_full_width
{
z-index: 100;
position: relative;
}
.parallax_content.left,
.parallax_content_full_width.left{
text-align: left;
}
.parallax_content.center,
.parallax_content_full_width.center{
text-align: center;
}
.parallax_content.right,
.parallax_content_full_width.right{
text-align: right;
}
/* ==========================================================================
Portfolio styles
========================================================================== */
.portfolio_single{
display: block;
position: relative;
}
.portfolio_single_text_holder,
.portfolio_detail,
.lightbox_single_portfolio{
position: relative;
}
.portfolio_single .flexslider,
.portfolio_single .portfolio_single_text_holder{
margin: 0 0 40px;
}
.portfolio_single .portfolio_images .fluid-width-video-wrapper,
.portfolio_single .portfolio_images img{
margin: 0 0 18px;
}
.portfolio_single a.lightbox_single_portfolio.video_in_lightbox{
display: block;
}
.portfolio_single a.lightbox_single_portfolio > i{
position: absolute;
top: 50%;
left: 50%;
display: inline-block;
vertical-align: middle;
font-size: 40px;
color: #fff;
margin: -20px 0 0 -15px;
z-index: 110;
}
.portfolio_single .portfolio_container{
position: relative;
z-index: 200;
}
.portfolio_single h2{
margin: 0px 0 5px 0;
}
.portfolio_single h3{
margin: 0px 0 8px 0;
}
.portfolio_detail.portfolio_single_follow {
position: relative;
}
.portfolio_detail .info{
padding: 0 0 9px;
margin: 0 0 9px;
}
.portfolio_detail .info:last-child{
border: 0px;
}
.video_holder{
position: relative;
width: 100%;
display: block;
min-height: 1px;
}
.portfolio_single .video .mobile-video-image {
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
display: none;
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
z-index: 10;
}
.portfolio_single .video{
margin: 0 0 44px;
position: relative;
}
.portfolio_single .video .video-wrap {
overflow: hidden;
position: relative;
width: 100%;
z-index: 10;
}
.portfolio_single .video .video-wrap .mejs-poster {
background-size: cover!important;
-moz-background-size: cover!important;
-webkit-background-size: cover!important;
-o-background-size: cover!important;
width: 100% !important;
height: 100% !important;
}
.portfolio_single .video .video-wrap .mejs-container {
background-color: transparent!important;
background-image: none!important;
height: 100% !important;
width: 100% !important;
overflow: hidden;
}
.portfolio_single .video .video-wrap .mejs-mediaelement{
background: none !important;
border: 0px !important;
}
.portfolio_single .video .video-wrap .mejs-container .mejs-poster img {
max-width: none!important;
width: 100%!important;
}
.portfolio_single .mejs-container .mejs-controls{
visibility: visible !important;
}
.portfolio_single .mejs-controls .mejs-volume-button .mejs-volume-slider{
display: none !important;
}
.flexslider .slides .mejs-poster img,
.portfolio_slider .portfolio_slides .mejs-poster img{
display: none;
}
.portfolio_single .flexslider .video .video-wrap{
margin: 0px;
}
/* Portfolio navigation styles
========================================================================== */
.portfolio_navigation {
display: inline-block;
width: 100%;
text-align: center;
padding: 28px 0 50px;
z-index: 100;
position: relative;
}
.portfolio_navigation .portfolio_prev,
.portfolio_navigation .portfolio_next,
.portfolio_navigation .portfolio_button{
display: inline-block;
height: 35px;
line-height: 35px;
}
.portfolio_navigation .portfolio_prev{
position: absolute;
left: 0;
}
.portfolio_navigation .portfolio_next{
position: absolute;
right: 0;
}
.portfolio_navigation .portfolio_prev a,
.portfolio_navigation .portfolio_next a{
position: relative;
display: inline-block;
width: 38px;
height: 38px;
line-height: 38px;
margin: 0 11px 0 0;
text-align:center;
font-size: 18px;
color: #b4b4b4;
text-decoration: none;
text-transform: uppercase;
cursor: pointer;
white-space: nowrap;
border: 2px solid #e5e5e5;
outline: none;
-o-border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
-ms-border-radius: 4px;
border-radius: 4px;
text-shadow: none;
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-ms-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
}
.portfolio_navigation .portfolio_prev a:hover,
.portfolio_navigation .portfolio_next a:hover {
color: #303030;
background-color: #e3e3e3;
border-color: #e3e3e3;
}
.portfolio_navigation .portfolio_button a{
background-image: url('img/portfolio_list_button.png');
background-position: 0 0;
background-repeat: no-repeat;
width: 19px;
display: block;
height: 19px;
margin: 11px 0 0 0;
-webkit-transition: background-image 0.3s ease-in-out;
-moz-transition: background-image 0.3s ease-in-out;
-ms-transition: background-image 0.3s ease-in-out;
-o-transition: background-image 0.3s ease-in-out;
transition: background-image 0.3s ease-in-out;
}
.portfolio_navigation .portfolio_button a:hover{
background-image: url('img/portfolio_list_button_hover.png');
}
@media only screen and (-webkit-min-device-pixel-ratio:1.5), only screen and (min--moz-device-pixel-ratio:1.5), only screen and (-o-min-device-pixel-ratio:150/100), only screen and (min-device-pixel-ratio:1.5), only screen and (min-resolution:160dpi) {
.portfolio_navigation .portfolio_button a{
background-image: url('img/portfolio_list_button@1_5x.png');
-o-background-size: 19px 19px;
-webkit-background-size: 19px 19px;
-moz-background-size: 19px 19px;
background-size: 19px 19px;
}
.portfolio_navigation .portfolio_button a:hover{
background-image: url('img/portfolio_list_button_hover@1_5x.png');
}
}
@media only screen and (-webkit-min-device-pixel-ratio:2.0), only screen and (min--moz-device-pixel-ratio:2.0), only screen and (-o-min-device-pixel-ratio:200/100), only screen and (min-device-pixel-ratio:2.0), only screen and (min-resolution:210dpi) {
.portfolio_navigation .portfolio_button a{
background-image: url('img/portfolio_list_button@2x.png');
-o-background-size: 19px 19px;
-webkit-background-size: 19px 19px;
-moz-background-size: 19px 19px;
background-size: 19px 19px;
}
.portfolio_navigation .portfolio_button a:hover{
background-image: url('img/portfolio_list_button_hover@2x.png');
}
}
.portfolio_navigation .portfolio_prev a:hover,
.portfolio_navigation .portfolio_next a:hover{
background-image: url('img/button-bg-px.png') !important;
}
.portfolio_social_holder{
width:100%;
display: inline-block;
}
.portfolio_single .portfolio_social_holder .portfolio_share,
.portfolio_single .portfolio_social_holder .portfolio_like{
display: inline-block;
margin: 0;
}
.portfolio_gallery {
display: inline-block;
width: 100%;
position: relative;
margin: 0 0 15px 0;
}
.portfolio_single .portfolio_gallery{
margin: 0 0 3px 0;
}
.portfolio_gallery a {
position: relative;
float: left;
display: inline-block;
overflow: hidden;
-webkit-backface-visibility: hidden;
-webkit-transform: translateZ(0px);
-moz-transform: translateZ(0px);
}
.portfolio_gallery a.v2 {
width: 49%;
margin: 0 2% 2% 0;
}
.portfolio_gallery a.v3 {
width: 32%;
margin: 0 2% 2% 0;
}
.portfolio_gallery a.v4 {
width: 23.5%;
margin: 0 2% 2% 0;
}
.portfolio_gallery a.v2:nth-child(2n),
.portfolio_gallery a.v3:nth-child(3n),
.portfolio_gallery a.v4:nth-child(4n) {
margin: 0 0 2% 0;
}
.portfolio_gallery a img,
.portfolio_gallery a frame {
position: relative;
display: block;
width: 100%;
z-index: 100;
}
.portfolio_gallery iframe{
min-height: 200px;
}
.portfolio_gallery a .gallery_text_holder{
background-color: #000;
background-color: rgba(0, 0, 0, 0.50);
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
display: inline-block;
z-index: 200;
opacity: 0;
filter: alpha(opacity=0);
visibility: visible;
-webkit-transition: opacity .4s;
-moz-transition: opacity .4s;
-o-transition: opacity .4s;
-ms-transition: opacity .4s;
}
.portfolio_gallery a img{
-webkit-transition: all 0.3s ease-out;
-moz-transition: all 0.3s ease-out;
-o-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.portfolio_gallery a:hover .gallery_text_holder{
opacity: 1;
filter: alpha(opacity=100);
}
.portfolio_gallery a .gallery_text_inner{
display: table;
text-align: center;
vertical-align: middle;
width: 100%;
height: 100%;
}
.portfolio_gallery a .gallery_text_inner h6{
display: table-cell;
text-align: center;
vertical-align: middle;
width: 100%;
height: 100%;
margin: 0;
padding: 0px 15px;
color: #fff;
}
.projects_holder_outer{
margin: 0;
display: block;
width: 100%;
}
.projects_holder_outer .container .container_inner{
padding: 0px 0px 0px 0px;
}
.full_width .projects_holder_outer.v6 .hover_text,
.full_width .projects_holder_outer.v5 .hover_text,
.full_width .projects_holder_outer.v4 .hover_text,
.full_width .projects_holder_outer.v5 .standard,
.full_width .projects_holder_outer.v6 .standard,
.full_width .projects_holder_outer.v4 .standard {
width: 95%;
margin: 0 auto;
}
.full_width .section_inner .projects_holder_outer.v6 .hover_text,
.full_width .section_inner .projects_holder_outer.v5 .hover_text,
.full_width .section_inner .projects_holder_outer.v4 .hover_text,
.full_width .section_inner .projects_holder_outer.v5 .standard,
.full_width .section_inner .projects_holder_outer.v6 .standard,
.full_width .section_inner .projects_holder_outer.v4 .standard {
width: 100%;
}
.full_width .projects_holder_outer.v6 .hover_text.no_space,
.full_width .projects_holder_outer.v5 .hover_text.no_space,
.full_width .projects_holder_outer.v4 .hover_text.no_space{
width: 100%;
margin: 0;
}
.projects_holder{
font-size: 0.1px;
line-height: 0;
list-style-type: none;
text-align: justify;
}
.projects_holder:after,
.projects_holder:before{
content: "";
display: inline-block !important;
width: 100%;
}
.projects_holder > .mix{
/*display: none;*/
visibility: hidden;
position: relative;
vertical-align: top;
-webkit-transition: all 0.7s ease-out;
-moz-transition: all 0.7s ease-out;
-o-transition: all 0.7s ease-out;
transition: all 0.7s ease-out;
text-align: left;
}
.projects_holder.hideItems > .mix{
display: none;
}
.projects_holder.hover_text.no_space:not(.portfolio_full_image) > .mix{
float: left;
}
.projects_holder .mix .image{
position: relative;
display: block;
overflow: hidden;
width: 100%;
-moz-transform: translateZ(0px);
-webkit-transform: translateZ(0px);
}
.projects_holder article .image img {
position: relative;
display: block;
width: 100%;
z-index: 100;
}
.projects_holder article .image img,
.portfolio_slider .portfolio_slides li.item img {
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1);
-webkit-transition: -webkit-transform 0.3s ease-in-out;
-moz-transition: -moz-transform 0.3s ease-in-out;
-ms-transition: -ms-transform 0.3s ease-in-out;
-o-transition: -o-transform 0.3s ease-in-out;
transition: transform 0.3s ease-in-out;
}
.projects_holder.hover_text.no_space article .image img{
margin:0 1px;
}
.projects_holder article .image_holder:hover .image img,
.portfolio_slider .portfolio_slides li.item:hover img {
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
-ms-transform: scale(1.1);
-o-transform: scale(1.1);
transform: scale(1.1);
}
.projects_holder article .image_holder,
.projects_holder article .portfolio_description{
display: block;
position: relative;
}
.projects_holder article .portfolio_description{
padding:20px 0 22px;
text-align:center;
background-color:#fff;
border-style:none;
border-top:none !important;
border-width:1px;
border-color: #fefefe;
}
.projects_holder article .portfolio_description.text_align_left {
text-align: left;
}
.projects_holder article .portfolio_description.text_align_center {
text-align: center;
}
.projects_holder article .portfolio_description.text_align_right {
text-align: right;
}
.standard_no_space.projects_holder article .portfolio_description{
margin: 0 -1px 0 0;
}
.projects_holder article .portfolio_description .portfolio_title {
display: block;
margin:0 0 7px 0;
}
.portfolio_slider .image_holder .separator.small{
margin: 10px auto;
background-color: #fff;
}
.projects_holder article .hover_feature_holder_title .separator.small,
.projects_masonry_holder article .hover_feature_holder_title .separator.small{
background-color: #fff;
margin-top: 10px;
margin-bottom: 10px;
}
.projects_holder article .portfolio_description .separator.small{
margin-top: 10px;
margin-bottom: 10px;
}
.wpb_column>.wpb_wrapper .portfolio_slider .image_holder .separator.small {
background-color: #fff;
}
.portfolio_slider .image_holder .separator.small.transparent{
background-color: transparent !important;
}
.projects_holder.hover_text article .hover_feature_holder_title .separator{
background-color: #fff;
}
.projects_holder.hover_text article .hover_feature_holder_title .portfolio_title a,
.projects_holder.hover_text article span.text_holder span.text_inner .hover_feature_holder_title .project_category{
color: #fff;
}
.projects_holder.hover_text article span.text_holder span.text_inner .hover_feature_holder_title .project_category{
font-weight:500;
}
.projects_holder.hover_text article .hover_feature_holder_title .portfolio_title{
margin:0 0 7px;
}
.projects_holder article .portfolio_description .project_category,
.projects_holder.hover_text article .project_category {
line-height: 22px;
display: block;
font-size: 13px;
font-weight:500;
}
.portfolio_single .portfolio_like{
position: relative;
display: inline-block;
cursor: pointer;
padding: 0px;
}
.portfolio_single .dots{
padding: 0 7px 0 4px;
}
.portfolio_single .dots i{
font-size: 3px;
vertical-align: middle;
}
.portfolio_single .portfolio_like a{
display: block;
font-size: 13px;
line-height: 13px;
text-align: center;
}
.portfolio_single .portfolio_like span{
line-height: 19px;
}
.portfolio_slider .portfolio_like a:hover i,
.portfolio_slider .portfolio_like span{
color: #e0e0e0;
}
.projects_holder article .portfolio_like a,
.projects_holder article .portfolio_like:hover a {
color: #fff;
}
.projects_holder article span.text_holder {
background-color: #000;
background-color: rgba(21, 21, 21, 0.78);
bottom: 0;
display: inline-block;
height: 100%;
left: 0;
opacity: 0;
position: absolute;
transition: opacity 0.4s ease-in-out;
-webkit-transition: opacity 0.4s ease-in-out;
-moz-transition: opacity 0.4s ease-in-out;
-o-transition: opacity 0.4s ease-in-out;
-ms-transition: opacity 0.4s ease-in-out;
visibility: visible;
overflow: hidden;
width: 100%;
z-index: 200;
}
.touch .projects_holder article span.text_holder{
display: none !important;
height: 0 !important;
width: 0 !important;
opacity: 0 !important;
visibility: hidden !important;
}
.projects_holder article:hover span.text_holder{
height:100% !important;
}
.projects_holder article .image_holder:hover span.text_holder{
opacity: 1;
filter: alpha(opacity=100);
}
.projects_holder.hover_text.with_mask article .image_holder:hover .image_hover{
opacity: 0;
filter: alpha(opacity=0);
}
.projects_holder article span.text_holder span.text_outer{
display: table;
text-align: center;
vertical-align: middle;
width: 100%;
height: 100%;
overflow:hidden;
}
.projects_holder article span.text_holder span span.text_inner{
display: table-cell;
text-align: center;
vertical-align: middle;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
.projects_holder article span.text_holder span span.text_inner .project_category{
color: #A6A6A6;
display: block;
font-size: 13px;
line-height: 22px;
}
.projects_holder article .feature_holder,
.projects_holder article .feature_holder .feature_holder_icons{
display: inline-block;
}
.projects_holder.hover_text article .feature_holder{
width: 100%;
}
.projects_holder.hover_text article .feature_holder .feature_holder_icons{
margin:20px 0 0 0;
}
.portfolio_slider,
.portfolio_slides .image_holder{
position: relative;
display: block;
-webkit-backface-visibility: hidden;
}
.portfolio_slides .image_pixel_hover{
position: absolute;
height: 100%;
width: 100%;
display: block;
background-color: transparent;
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-ms-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
z-index: 100;
}
.touch .portfolio_slides .image_pixel_hover{
display: none !important;
}
.portfolio_slides li:hover .image_pixel_hover{
background-color: #000;
background-color: rgba(21, 21, 21, 0.78);
}
.portfolio_slides .image_holder .image {
position: relative;
display: block;
overflow: hidden;
width: 100%;
-webkit-transition: -webkit-transform 0.4s;
-moz-transition: -moz-transform 0.4s;
transition: transform 0.4s;
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
}
.portfolio_slides .hover_feature_holder{
position: absolute;
display: block;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 101;
}
.touch .portfolio_slides .hover_feature_holder{
display: none !important;
}
.portfolio_slides .hover_feature_holder_icons{
position: relative;
opacity: 0;
text-align: center;
display: inline-block;
width: 100%;
margin: 0 0 30px;
-webkit-transition: opacity .4s ease-in-out 0.1s;
-moz-transition: opacity .4s ease-in-out 0.1s;
-o-transition: opacity .4s ease-in-out 0.1s;
-ms-transition: opacity .4s ease-in-out 0.1s;
transition: opacity .4s ease-in-out 0.1s;
-webkit-transform: translateZ(0px);
-moz-transform: translateZ(0px);
display: none;
}
.portfolio_slides li:hover .hover_feature_holder_icons {
opacity: 1;
}
.portfolio_slides .hover_feature_holder_icons_inner {
display: inline-block;
position: relative;
}
.portfolio_slides .hover_feature_holder_outer {
position: relative;
opacity: 1 !important;
top: 0;
height: 100%;
display: table;
width: 100%;
}
.portfolio_slides .hover_feature_holder_inner {
height: 100%;
width: 100%;
top: 0;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
box-sizing: border-box;
opacity: 0;
display: table-cell;
vertical-align: middle;
padding: 0 5%;
text-align: center;
color: #fff;
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-ms-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
}
.portfolio_slides .hover_feature_holder_inner .portfolio_title {
text-transform: uppercase;
letter-spacing: 1px;
}
.portfolio_slides .hover_feature_holder_inner .portfolio_title a {
color: #fff;
}
.portfolio_slides .hover_feature_holder_inner .qbutton {
margin-top: 24px;
margin-left: 5px;
margin-right: 5px;
}
.portfolio_slides .hover_feature_holder_inner .qbutton:hover {
border-color: #1abc9c;
}
.portfolio_slides li:hover .hover_feature_holder_inner{
opacity: 1;
}
.projects_holder.hover_text article .image_holder{
overflow: hidden;
}
.projects_holder.hover_text.no_space article .image_holder{
margin: 0 -1px;
}
.projects_holder article a.lightbox,
.projects_holder article a.preview,
.projects_holder article .portfolio_like,
.portfolio_slider a.lightbox,
.portfolio_slider a.preview,
.portfolio_slider .portfolio_like{
position: relative;
display: inline-block;
margin:0 0 5px 0;
-webkit-backface-visibility: hidden;
}
.projects_holder article a.lightbox,
.portfolio_slider a.lightbox{
margin: 0 10px 0 0;
}
.projects_holder article .portfolio_like,
.portfolio_slider .portfolio_like{
margin: 0 0 0 10px;
}
.projects_holder article .portfolio_like i,
.portfolio_slider .portfolio_like i{
line-height: 20px;
margin: 4px 0 0 0;
}
.portfolio_like .qode-like-count span{
display:none;
}
.projects_holder article .portfolio_like a:hover,
.portfolio_slider .portfolio_like a:hover{
/*opacity: 0.7;*/
/*filter: alpha(opacity=70);*/
}
.projects_holder article .portfolio_like .qode-like-count,
.portfolio_slider article .portfolio_like .qode-like-count{
font-size: 13px;
line-height: 13px;
color: #fff;
}
.projects_holder .filler {
display: inline-block;
height: 0px;
}
.projects_holder.v6 .mix,
.projects_holder.v6.hover_text .mix{
width: 15.7%;
margin: 0 0 1.2%;
}
.projects_holder.v6.hover_text .mix{
margin: 0 0 1.7%;
}
.projects_holder.v6 .filler,
.projects_holder.v6.hover_text .filler{
width: 15.7%;
}
.projects_holder.v6.standard_no_space .mix,
.projects_holder.v6.hover_text.no_space .mix{
width: 16.66%;
margin: 0;
}
.projects_holder.v6.standard_no_space .mix{
margin: 0 0 0%;
}
.projects_holder.v6.standard_no_space .filler,
.projects_holder.v6.hover_text.no_space .filler{
width: 16.66%;
}
.safari_browser .projects_holder.v6.standard_no_space .mix,
.safari_browser .projects_holder.v6.hover_text.no_space .mix{
width: 16.6%;
}
.safari_browser .projects_holder.v6.standard_no_space .filler,
.safari_browser .projects_holder.v6.hover_text.no_space .filler{
width: 16.6%;
}
.projects_holder.v5 .mix,
.projects_holder.v5.hover_text .mix{
width: 18%;
margin: 0 0 2.9%;
}
.projects_holder.v5.hover_text .mix{
margin: 0 0 2%;
}
.projects_holder.v5 .filler,
.projects_holder.v5.hover_text .filler{
width: 18.5%;
}
.projects_holder.v5.standard_no_space .mix,
.projects_holder.v5.hover_text.no_space .mix{
width: 19.99%;
margin: 0;
}
.projects_holder.v5.standard_no_space .mix{
margin: 0 0 0%;
}
.projects_holder.v5.standard_no_space .filler,
.projects_holder.v5.hover_text.no_space .filler{
width: 19.99%;
}
.safari_browser .projects_holder.v5.standard_no_space .mix,
.safari_browser .projects_holder.v5.hover_text.no_space .mix{
width: 19.93%;
}
.safari_browser .projects_holder.v5.standard_no_space .filler,
.safari_browser .projects_holder.v5.hover_text.no_space .filler{
width: 19.93%;
}
.projects_holder.v4 .mix,
.projects_holder.v4.hover_text .mix{
width: 23.5%;
margin: 0 0 2.5%;
}
.projects_holder.v4.hover_text .mix{
margin: 0 0 2.2%;
}
.projects_holder.v4 .filler,
.projects_holder.v4.hover_text .filler{
width: 23.5%;
}
.projects_holder.v4.standard_no_space .mix,
.projects_holder.v4.hover_text.no_space .mix{
width: 24.99%;
margin: 0;
}
.projects_holder.v4.standard_no_space .mix{
margin: 0 0 0;
}
.projects_holder.v4.standard_no_space .filler,
.projects_holder.v4.hover_text.no_space .filler{
width: 24.99%;
}
.projects_holder.v3 .mix,
.projects_holder.v3.hover_text .mix{
width: 32%;
margin: 0 0 2.4%;
}
.projects_holder.v3.hover_text .mix{
margin: 0 0 2.2%;
}
.projects_holder.v3 .filler,
.projects_holder.v3.hover_text .filler{
width: 32%;
}
.projects_holder.v3.standard_no_space .mix,
.projects_holder.v3.hover_text.no_space .mix{
width: 33.32%;
margin: 0;
}
.projects_holder.v3.standard_no_space .mix{
margin: 0 0 0%;
}
.projects_holder.v3.standard_no_space .filler,
.projects_holder.v3.hover_text.no_space .filler{
width: 33.32%;
}
.safari_browser .projects_holder.v3.standard_no_space .mix,
.safari_browser .projects_holder.v3.hover_text.no_space .mix{
width: 33.3%;
}
.safari_browser .projects_holder.v3.standard_no_space .filler,
.safari_browser .projects_holder.v3.hover_text.no_space .filler{
width: 33.3%;
}
.projects_holder.v2 .mix,
.projects_holder.v2.hover_text .mix{
width: 49%;
margin: 0 0 2.4%;
}
.projects_holder.v2.hover_text .mix{
margin: 0 0 2.1%;
}
.projects_holder.v2 .filler,
.projects_holder.v2.hover_text .filler{
width: 49%;
}
.projects_holder.v2.standard_no_space .mix,
.projects_holder.v2.hover_text.no_space .mix{
width: 49.99%;
margin: 0;
}
.projects_holder.v2.standard_no_space .mix{
margin: 0 0 0%;
}
.projects_holder.v2.standard_no_space .filler,
.projects_holder.v2.hover_text.no_space .filler{
width: 49.99%;
}
.portfolio_paging, .portfolio_paging_loading {
text-align: center;
margin: 40px 0 0;
}
.portfolio_paging_loading { display: none; }
.portfolio_with_space .portfolio_paging,
.portfolio_with_space .portfolio_paging_loading {
margin: 15px 0 0;
}
.filter_outer{
display: table;
width: 100%;
position: relative;
height: 37px;
margin: -30px 0 40px;
text-align:center;
}
.vertical_menu_enabled .full_width .filter_outer{
margin: 0 0 40px;
}
.filter_holder {
display:table-cell;
vertical-align: middle;
}
.filter_holder ul {
display: inline-block;
list-style: none;
}
.filter_holder ul li {
cursor: pointer;
display: block;
margin: 0;
float:left;
text-align: center;
}
.filter_holder ul li span {
display: inline-block;
padding: 0 22px;
position: relative;
letter-spacing:1px;
text-transform: uppercase;
font-weight: 600;
}
.filter_holder ul li.active span{
color:#1abc9c !important;
}
.filter_holder ul li:hover span{
color:#1abc9c !important;
}
/* Portfolio Masonry styles
========================================================================== */
.projects_masonry_holder{
opacity: 0;
}
.projects_masonry_holder .portfolio_masonry_item,
.projects_masonry_holder .portfolio_masonry_item.large_height{
width: 33.33%;
}
.projects_masonry_holder .portfolio_masonry_item.large_width,
.projects_masonry_holder .portfolio_masonry_item.large_width_height{
width: 66.66%;
}
.full_width .projects_masonry_holder .portfolio_masonry_item,
.full_width .projects_masonry_holder .portfolio_masonry_item.large_height{
width: 19.96%;
}
.full_width .projects_masonry_holder .portfolio_masonry_item.large_width,
.full_width .projects_masonry_holder .portfolio_masonry_item.large_width_height{
width: 39.92%;
}
.full_width .projects_masonry_holder.gs4 .portfolio_masonry_item,
.full_width .projects_masonry_holder.gs4 .portfolio_masonry_item.large_height,
.projects_masonry_holder.gs4 .portfolio_masonry_item,
.projects_masonry_holder.gs4 .portfolio_masonry_item.large_height
{
width: 25%;
}
.full_width .projects_masonry_holder.gs4 .portfolio_masonry_item.large_width,
.full_width .projects_masonry_holder.gs4 .portfolio_masonry_item.large_width_height,
.projects_masonry_holder.gs4 .portfolio_masonry_item.large_width,
.projects_masonry_holder.gs4 .portfolio_masonry_item.large_width_height
{
width: 50%;
}
.projects_masonry_holder:after,
.projects_masonry_holder .portfolio_masonry_item:after {
clear: both;
content: "";
display: block;
height: 0;
visibility: hidden;
}
.projects_masonry_holder .image_holder img{
vertical-align: top;
width: 100%;
height: auto;
}
.projects_masonry_holder .image_holder{
margin: 0px -1px 0px 0px;
}
.projects_masonry_holder .text_holder{
position: absolute;
top: 0;
left: 0;
width: 100.2%; /* beacuse there is one pixel o right side that is not covered with hover shader */
height: 100%;
background-color: rgba(0,0,0,0.8);
text-align: center;
transition: opacity 0.4s ease-in-out;
-webkit-transition: opacity 0.4s ease-in-out;
-moz-transition: opacity 0.4s ease-in-out;
-o-transition: opacity 0.4s ease-in-out;
-ms-transition: opacity 0.4s ease-in-out;
visibility: visible;
overflow: hidden;
z-index: 200;
opacity: 0;
filter: alpha(opacity=0);
}
.projects_masonry_holder .text_holder .text_outer{
display: table;
text-align: center;
vertical-align: middle;
width: 100%;
height: 100%;
overflow: hidden;
}
.projects_masonry_holder .text_holder .text_inner{
display: table-cell;
text-align: center;
vertical-align: middle;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
.projects_masonry_holder article.portfolio_masonry_item:hover .text_holder{
opacity: 1;
filter: alpha(opacity=100);
}
.projects_masonry_holder .portfolio_title {
margin: 0 0 7px;
}
.projects_masonry_holder .portfolio_title a{
color: #fff;
}
.projects_masonry_holder .project_category,
.masonry_with_space_only_image .project_category {
font-weight: 500;
}
.projects_masonry_holder .separator,
.masonry_with_space_only_image .separator{
background-color: #fff;
}
.projects_masonry_holder .feature_holder_icons {
margin: 20px 0 0 0;
display: inline-block;
}
.projects_masonry_holder .feature_holder {
width: 100%;
display: inline-block;
}
.projects_masonry_holder a.lightbox {
margin: 0 10px 0 0;
}
.projects_masonry_holder .portfolio_like {
margin: 0 0 0 10px;
}
.projects_masonry_holder .portfolio_like a,
.projects_masonry_holder .portfolio_like:hover a {
color: #fff;
}
.masonry_with_space .projects_holder{
position: relative;
opacity: 0;
}
.masonry_with_space .projects_holder .mix{
display: block;
padding: 0px 7px;
margin: 0px 0px 14px 0px !important;
-webkit-transition: none;
-moz-transition: none;
-o-transition: none;
transition: none;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
visibility: visible;
}
.masonry_with_space .projects_holder.v6 .mix{
width: 16.66%;
}
.masonry_with_space .projects_holder.v5 .mix{
width: 20%;
}
.masonry_with_space .projects_holder.v4 .mix{
width: 25%;
}
.masonry_with_space .projects_holder.v3 .mix{
width: 33.33%;
}
.masonry_with_space .projects_holder.v2 .mix{
width: 49.99%;
}
/*----------------------Portfolio "Fade - one by one" loading type-------------------------------*/
.projects_holder_outer:not(.masonry_with_space) .projects_holder.portfolio_one_by_one article{
opacity: 0 !important;
}
.projects_holder_outer:not(.masonry_with_space) .projects_holder.portfolio_one_by_one article.show{
opacity: 1 !important;
}
.projects_holder_outer.masonry_with_space .projects_holder.portfolio_one_by_one article,
.projects_masonry_holder.portfolio_one_by_one article{
opacity: 0;
}
.projects_holder_outer.masonry_with_space .projects_holder.portfolio_one_by_one article.show,
.projects_masonry_holder.portfolio_one_by_one article.show{
opacity: 1;
}
/*---------------------Portfolio "Slide from top - diagonal" loading type-------------------------*/
.projects_holder.slide_from_top article{
overflow:hidden;
}
.projects_holder.slide_from_top article .image_holder,
.projects_holder.slide_from_top article .portfolio_description{
opacity: 0 !important;
-webkit-transform: translateY(-70%);
transform: translateY(-70%);
-moz-transition: -moz-transform 0.4s cubic-bezier(.4,0,.2,1), opacity 0.4s cubic-bezier(.4,0,.2,1);
-webkit-transition: -webkit-transform 0.4s cubic-bezier(.4,0,.2,1), opacity 0.4s cubic-bezier(.4,0,.2,1);
transition: transform 0.4s cubic-bezier(.4,0,.2,1), opacity 0.4s cubic-bezier(.4,0,.2,1);
}
.projects_holder.slide_from_top article.show .image_holder,
.projects_holder.slide_from_top article.show .portfolio_description{
opacity: 1 !important;
-webkit-transform: translateY(0);
transform: translateY(0);
}
/*---------------------Portfolio "Fade - diagonal" loading type-------------------------*/
.projects_holder.diagonal_fade article{
opacity: 0 !important;
-moz-transition: opacity 0.4s ease-in-out, -moz-transform 0.4s ease-in-out;
-webkit-transition: opacity 0.4s ease-in-out, -webkit-transform 0.4s ease-in-out;
transition:opacity 0.4s ease-in-out, transform 0.4s ease-in-out;
-webkit-transform: scale(0.8);
-moz-transform: scale(0.8);
transform: scale(0.8);
}
.projects_holder.diagonal_fade article.show{
opacity: 1 !important;
-webkit-transform: scale(1);
transform: scale(1);
}
/*---------------------Portfolio "Slide from left - random" loading type-------------------------*/
.projects_holder.slide_from_left article{
overflow:hidden;
}
.projects_holder.slide_from_left article .image_holder,
.projects_holder.slide_from_left article .portfolio_description{
opacity: 0 !important;
-webkit-transform: translateX(-100%);
transform: translateX(-100%);
-moz-transition: -moz-transform 0.3s cubic-bezier(.4,0,.2,1), opacity 0.3s cubic-bezier(.4,0,.2,1);
-webkit-transition: -webkit-transform 0.3s cubic-bezier(.4,0,.2,1), opacity 0.3s cubic-bezier(.4,0,.2,1);
transition: transform 0.3s cubic-bezier(.4,0,.2,1), opacity 0.3s cubic-bezier(.4,0,.2,1);
}
.projects_holder.slide_from_left article.show .image_holder,
.projects_holder.slide_from_left article.show .portfolio_description{
opacity: 1 !important;
-webkit-transform: translateX(0);
transform: translateX(0);
}
/*---------------------Portfolio "Fade from bottom" loading type-------------------------*/
.projects_holder.portfolio_fade_from_bottom article,
.projects_masonry_holder.portfolio_fade_from_bottom article {
opacity: 0;
-ms-transform: translateY(150px);
-webkit-transform: translateY(150px);
transform: translateY(150px);
-ms-transition: opacity 0.8s ease, -ms-transform 0.8s ease !important;
-webkit-transition: opacity 0.8s ease, -webkit-transform 0.8s ease !important;
transition: opacity 0.8s ease, transform 0.8s ease !important;
}
.projects_holder.portfolio_fade_from_bottom article.show,
.projects_masonry_holder.portfolio_fade_from_bottom article.show {
opacity: 1;
margin-top: 0px;
-ms-transform: translateY(0px);
-webkit-transform: translateY(0px);
transform: translateY(0px);
}
/* ==========================================================================
#Portfolio Masonry With Space Without Description
========================================================================== */
.masonry_with_space_only_image .hover_feature_holder_title_inner . portfolio_title {
margin-bottom: 7px;
}
.masonry_with_space_only_image .hover_feature_holder_title_inner .portfolio_title,
.masonry_with_space_only_image .hover_feature_holder_title_inner .portfolio_title a,
.masonry_with_space_only_image .projects_holder article span.text_holder span span.text_inner .project_category {
color: #fff;
}
.projects_holder.standard article .item_holder.image_text_zoom_hover .project_category {
margin-bottom: 10px;
}
.masonry_with_space_only_image .feature_holder {
margin-top: 30px;
}
/* ==========================================================================
#End of Portfolio Masonry With Space Without Description
========================================================================== */
/* ==========================================================================
#Portfolio Hover effects styles
========================================================================== */
.portfolio_main_holder .item_holder {
position: relative;
}
.projects_holder article a.portfolio_link_class,
.projects_masonry_holder article a.portfolio_link_class {
position: absolute;
width: 100%;
height: 100%;
}
.portfolio_main_holder .item_holder .text_holder {
position: absolute;
}
.portfolio_main_holder .project_category {
margin: 0;
display: block;
line-height: 1;
font-size: 12px;
}
.portfolio_main_holder .item_holder .text_holder_outer {
display: table;
width:100%;
height: 100%;
}
.portfolio_main_holder .item_holder .text_holder_inner{
display: table-cell;
vertical-align: middle;
text-align:center;
}
.portfolio_main_holder .item_holder .portfolio_shader {
position: absolute;
width:100%;
height: 100%;
background-color: rgba(21,21,21,0.78);
}
.portfolio_main_holder .item_holder .icons_holder{
font-family: "Raleway",sans-serif;
/* this css is here to overwrite other font-family (from body) which can make problem in icon height */
}
.portfolio_main_holder .item_holder .icons_holder a {
text-align: center;
}
.portfolio_main_holder .item_holder .portfolio_title {
line-height:1.25em;
}
.projects_holder.standard article .project_category,
.projects_holder.standard_no_space article .project_category,
.portfolio_slider_holder.standard li .project_category{
margin:10px 0 0 0;
}
.projects_holder article a.portfolio_link_class, .projects_masonry_holder article a.portfolio_link_class {
z-index: 5;
left: 0;
}
.portfolio_main_holder article .icons_holder a.portfolio_lightbox:before,
.portfolio_slides .icons_holder a.portfolio_lightbox:before{
font-family: 'FontAwesome';
content: "\f067";
line-height: inherit;
}
.portfolio_main_holder article .icons_holder a.qode-like:before,
.portfolio_slides .icons_holder a.qode-like:before{
font-family: 'FontAwesome';
content: "\f08a";
line-height: inherit;
}
.portfolio_main_holder article .icons_holder a.qode-like.liked:before,
.portfolio_slides .icons_holder a.qode-like.liked:before{
font-family: "FontAwesome";
content: "\f004";
line-height: inherit;
}
.portfolio_main_holder article .icons_holder a.preview:before,
.portfolio_slides .icons_holder a.preview:before {
content: "\f0c1";
font-family: "FontAwesome";
line-height: inherit;
}
.portfolio_main_holder .item_holder .portfolio_title a,
.portfolio_main_holder .item_holder .project_category {
color: #fff;
}
.portfolio_main_holder .item_holder .portfolio_title {
margin-bottom: 15px;
}
/* #Subtle vertical hover
========================================================================== */
.projects_holder article .item_holder.subtle_vertical_hover a.portfolio_link_class,
.projects_masonry_holder article .item_holder.subtle_vertical_hover a.portfolio_link_class {
z-index: 5
}
.portfolio_main_holder .item_holder.subtle_vertical_hover .image_holder {
z-index: 2
}
.portfolio_main_holder .item_holder.subtle_vertical_hover .text_holder {
font-size: 14px;
width: 100%;
position: absolute;
left: 0;
height: 100%;
background-color: transparent;
top: 0;
text-align: center;
box-sizing: border-box;
z-index: 4;
opacity: 0;
}
.portfolio_main_holder article .item_holder.subtle_vertical_hover:hover .text_holder,
.portfolio_slider li.item:hover .item_holder.subtle_vertical_hover .text_holder {
opacity: 1
}
.portfolio_main_holder .item_holder.subtle_vertical_hover .text_holder_inner {
padding: 5px;
}
.portfolio_main_holder .item_holder.subtle_vertical_hover .portfolio_title {
text-transform: uppercase;
opacity: 0;
padding: 0 20px;
-ms-transform: translateY(0px);
-moz-transform: translateY(0px);
-o-transform: translateY(0px);
transform: translateY(0px);
-webkit-transform: translateY(0px);
transition: all 0.3s ease-out;
-webkit-transition: all 0.3s ease-out;
}
.portfolio_main_holder article:hover .item_holder.subtle_vertical_hover .portfolio_title,
.portfolio_slider li.item:hover .item_holder.subtle_vertical_hover .portfolio_title {
opacity: 1;
text-shadow: none;
-ms-transform: translateY(4px);
-moz-transform: translateY(4px);
-o-transform: translateY(4px);
transform: translateY(4px);
-webkit-transform: translateY(4px);
transition: all 0.3s ease-out;
-webkit-transition: all 0.3s ease-out;
}
.portfolio_main_holder .item_holder.subtle_vertical_hover .text_holder .separator {
display: inline-block;
background-color: #fff;
margin-top: 20px;
}
.portfolio_main_holder .item_holder.subtle_vertical_hover .project_category {
opacity: 0;
-ms-transform: translateY(4px);
-moz-transform: translateY(4px);
-o-transform: translateY(4px);
transform: translateY(4px);
-webkit-transform: translateY(4px);
transition: all 0.4s ease-out;
-webkit-transition: all 0.4s ease-out;
margin-bottom: 10px;
}
.portfolio_main_holder article:hover .item_holder.subtle_vertical_hover .project_category,
.portfolio_slider li.item:hover .item_holder.subtle_vertical_hover .project_category {
opacity: 1;
text-shadow: none;
-ms-transform: translateY(0px);
-moz-transform: translateY(0px);
-o-transform: translateY(0px);
transform: translateY(0px);
-webkit-transform: translateY(0px);
}
.portfolio_main_holder .item_holder.subtle_vertical_hover .icons_holder {
-ms-transform: translateY(4px);
-moz-transform: translateY(4px);
-o-transform: translateY(4px);
transform: translateY(4px);
-webkit-transform: translateY(4px);
transition: all 0.4s ease-out;
-webkit-transition: all 0.4s ease-out;
}
.portfolio_main_holder article .item_holder.subtle_vertical_hover:hover .icons_holder,
.portfolio_slider li.item:hover .item_holder.subtle_vertical_hover .icons_holder {
-ms-transform: translateY(0);
-moz-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
-webkit-transform: translateY(0);
}
.portfolio_main_holder .item_holder.subtle_vertical_hover .icons_holder a {
display: inline-block;
width: 40px;
height: 40px;
line-height: 40px;
background-color: #1abc9c;
border-radius: 100px;
margin: 0 3px;
color: #fff;
transition: 0.2s ease-out;
-webkit-transition: 0.2s ease-out;
}
.portfolio_main_holder .item_holder.subtle_vertical_hover .portfolio_shader {
z-index: 3;
-webkit-transition: opacity 0.3s cubic-bezier(.785, .135, .15, .86);
transition: opacity 0.3s cubic-bezier(.785, .135, .15, .86);
opacity: 0;
}
.portfolio_main_holder article .item_holder.subtle_vertical_hover:hover .portfolio_shader,
.portfolio_slider li.item:hover .item_holder.subtle_vertical_hover .portfolio_shader {
opacity: 1
}
/* #End of Subtle vertical hover
========================================================================== */
/* #Image subtle rotate zoom hover
========================================================================== */
.portfolio_main_holder article .item_holder.image_subtle_rotate_zoom_hover a.portfolio_link_class {
z-index: 5;
}
.portfolio_main_holder .item_holder.image_subtle_rotate_zoom_hover .image_holder {
z-index: 2;
overflow: hidden;
}
.portfolio_main_holder .item_holder.image_subtle_rotate_zoom_hover .text_holder {
padding: 30px;
font-size: 14px;
width: 100%;
position: absolute;
left: 0;
height: 100%;
background-color: transparent;
top: 0;
box-sizing: border-box;
z-index: 4;
opacity: 1;
}
.portfolio_with_hover_text .portfolio_main_holder .item_holder.image_subtle_rotate_zoom_hover .separator {
background-color: #fff;
opacity: 0;
-webkit-transition: opacity 0.4s ease-out;
-moz-transition: opacity 0.4s ease-out;
-ms-transition: opacity 0.4s ease-out;
-o-transition: opacity 0.4s ease-out;
transition: opacity 0.4s ease-out;
}
.portfolio_with_hover_text .portfolio_main_holder .item_holder.image_subtle_rotate_zoom_hover:hover .separator {
opacity: 1;
}
.portfolio_main_holder .item_holder.image_subtle_rotate_zoom_hover .portfolio_title {
font-weight: 600;
font-size: 15px;
text-transform: uppercase;
opacity: 0;
letter-spacing: 2px;
-ms-transform: translateY(-3px);
-moz-transform: translateY(-3px);
-o-transform: translateY(-3px);
transform: translateY(-3px);
-webkit-transform: translateY(-3px);
transition: all 0.4s ease-out;
-webkit-transition: all 0.4s ease-out;
}
.portfolio_main_holder article:hover .item_holder.image_subtle_rotate_zoom_hover .portfolio_title,
.portfolio_slider li.item:hover .item_holder.image_subtle_rotate_zoom_hover .portfolio_title {
opacity: 1;
text-shadow: none;
-ms-transform: translateY(0px);
-moz-transform: translateY(0px);
-o-transform: translateY(0px);
transform: translateY(0px);
-webkit-transform: translateY(0px);
}
.portfolio_main_holder .item_holder.image_subtle_rotate_zoom_hover .project_category {
opacity: 0;
text-shadow: 0px 0px 10px #fff;
-ms-transform: translateY(3px);
-moz-transform: translateY(3px);
-o-transform: translateY(3px);
transform: translateY(3px);
-webkit-transform: translateY(3px);
transition: all 0.4s ease-out;
-webkit-transition: all 0.4s ease-out;
}
.portfolio_main_holder article:hover .item_holder.image_subtle_rotate_zoom_hover .project_category {
opacity: 1;
text-shadow: none;
-ms-transform: translateY(0px);
-moz-transform: translateY(0px);
-o-transform: translateY(0px);
transform: translateY(0px);
-webkit-transform: translateY(0px);
}
.portfolio_main_holder .item_holder.image_subtle_rotate_zoom_hover .portfolio_shader {
z-index: 3;
-webkit-transition: opacity 0.3s cubic-bezier(.785, .135, .15, .86);
transition: opacity 0.3s cubic-bezier(.785, .135, .15, .86);
opacity: 0;
}
.portfolio_main_holder article .item_holder.image_subtle_rotate_zoom_hover:hover .portfolio_shader,
.portfolio_slider li.item:hover .item_holder.image_subtle_rotate_zoom_hover .portfolio_shader {
opacity: 1;
}
.portfolio_main_holder .item_holder.image_subtle_rotate_zoom_hover .icons_holder {
-ms-transform: translateY(3px);
-moz-transform: translateY(3px);
-o-transform: translateY(3px);
transform: translateY(3px);
-webkit-transform: translateY(3px);
transition: transform 0.4s ease-out;
-webkit-transition: transform 0.4s ease-out;
opacity: 0;
}
.portfolio_main_holder article .item_holder.image_subtle_rotate_zoom_hover:hover .icons_holder,
.portfolio_slider li.item:hover .item_holder.image_subtle_rotate_zoom_hover .icons_holder {
-ms-transform: translateY(0);
-moz-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
-webkit-transform: translateY(0);
opacity: 1;
}
.portfolio_main_holder .item_holder.image_subtle_rotate_zoom_hover .icons_holder a {
display: inline-block;
background-color: transparent;
border: 1px solid #fff;
width: 40px;
height: 40px;
line-height: 40px;
color: #fff;
border-radius: 100px;
margin: 0 3px;
transition: 0.2s ease-out;
-webkit-transition: 0.2s ease-out;
}
.portfolio_main_holder .item_holder.image_subtle_rotate_zoom_hover .icons_holder a:hover {
background-color: #1abc9c;
color: #fff;
border-color: #1abc9c;
}
.portfolio_main_holder .item_holder.image_subtle_rotate_zoom_hover .image_holder .image img {
-webkit-transition: -webkit-transform .7s;
transition: transform .7s;
}
.portfolio_main_holder article .item_holder.image_subtle_rotate_zoom_hover:hover .image_holder .image img,
.portfolio_slider li.item:hover .item_holder.image_subtle_rotate_zoom_hover .image_holder .image img {
-webkit-transform: rotate(-9deg) scale(1.15);
-ms-transform: rotate(-9deg) scale(1.15);
-moz-transform: rotate(-9deg) scale(1.15);
-o-transform: rotate(-9deg) scale(1.15);
transform: rotate(-9deg) scale(1.15);
-webkit-transition: -webkit-transform .7s;
transition: transform .7s;
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
}
/* #End of image subtle rotate zoom hover
========================================================================== */
/* #Image text zoom hover
========================================================================== */
.portfolio_main_holder article .item_holder.image_text_zoom_hover a.portfolio_link_class {
z-index: 5;
}
.portfolio_main_holder .item_holder.image_text_zoom_hover .image_holder {
z-index: 2;
overflow: hidden;
}
.portfolio_main_holder .item_holder.image_text_zoom_hover .text_holder {
padding: 30px;
font-size: 14px;
width: 100%;
height: 100%;
position: absolute;
left: 0;
background-color: transparent;
top: 0;
text-align: center;
box-sizing: border-box;
opacity: 0;
-webkit-transition: 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);
transition: 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
-webkit-transform: scale(0.8);
-ms-transform: scale(0.8);
-moz-transform: scale(0.8);
-o-transform: scale(0.8);
transform: scale(0.8);
z-index: 4;
}
.portfolio_main_holder article .item_holder.image_text_zoom_hover:hover .text_holder,
.portfolio_slider li.item:hover .item_holder.image_text_zoom_hover .text_holder {
opacity: 1;
-webkit-transform: scale(1);
-ms-transform: scale(1);
-moz-transform: scale(1);
-o-transform: scale(1);
transform: scale(1);
}
.portfolio_main_holder .item_holder.image_text_zoom_hover .text_holder_outer {
display: table;
width: 100%;
height: 100%;
}
.portfolio_main_holder .item_holder.image_text_zoom_hover .text_holder_inner {
display: table-cell;
vertical-align: middle;
text-align: center;
}
.portfolio_with_hover_text .portfolio_main_holder .item_holder.image_text_zoom_hover .separator {
background-color: #fff;
}
.portfolio_main_holder .project_category, .projects_masonry_holder article .project_category {
margin-bottom: 10px;
}
.portfolio_main_holder .item_holder.image_text_zoom_hover .icons_holder a {
display: inline-block;
width: 40px;
height: 40px;
line-height: 40px;
background-color: #1abc9c;
border-radius: 50%;
margin: 0 2px;
color: #fff;
-ms-transform: translateY(0);
-moz-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
-webkit-transform: translateY(0);
transition: background-color 0.2s, transform 0.2s;
-webkit-transition: background-color 0.2s, -webkit-transform 0.2s;
}
.portfolio_main_holder .item_holder.image_text_zoom_hover .icons_holder a:hover {
-ms-transform: translateY(-10%);
-moz-transform: translateY(-10%);
-o-transform: translateY(-10%);
transform: translateY(-10%);
-webkit-transform: translateY(-10%);
}
.portfolio_main_holder .item_holder.image_text_zoom_hover .portfolio_shader {
z-index: 3;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
-webkit-transition: opacity 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);
transition: opacity 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);
opacity: 0;
}
.portfolio_main_holder article .item_holder.image_text_zoom_hover:hover .portfolio_shader,
.portfolio_slider li.item:hover .item_holder.image_text_zoom_hover .portfolio_shader {
opacity: 1
}
.portfolio_main_holder .item_holder.image_text_zoom_hover .image_holder .image {
-webkit-transition: 0.5s cubic-bezier(0.19, 1, 0.22, 1);
transition: 0.5s cubic-bezier(0.19, 1, 0.22, 1);
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
display: inline-block;
}
.portfolio_main_holder article .item_holder.image_text_zoom_hover:hover .image_holder .image,
.portfolio_slider li.item:hover .item_holder.image_text_zoom_hover .image_holder .image {
-webkit-transform: scale(1.3);
-ms-transform: scale(1.3);
-moz-transform: scale(1.3);
-o-transform: scale(1.3);
transform: scale(1.3);
}
/* #End of image text zoom hover
========================================================================== */
/* #Thin plus only hover
========================================================================== */
.portfolio_main_holder.standard .item_holder.thin_plus_only {
overflow: hidden;
}
.portfolio_main_holder .item_holder.thin_plus_only .thin_plus_only_icon {
font-weight: 100;
font-family: Raleway;
font-size: 100px;
-webkit-transition: all 0.5s 0.3s;
transition: all 0.5s 0.3s;
display: block;
color: #fff;
}
.portfolio_main_holder .item_holder.thin_plus_only .text_holder {
width: 100%;
height: 100%;
left: 0;
margin: 0;
top: 0;
box-sizing: border-box;
z-index: 5;
-ms-transform: translate(20%, 20%);
-moz-transform: translate(20%, 20%);
-o-transform: translate(20%, 20%);
transform: translate(20%, 20%);
-webkit-transform: translate(20%, 20%);
-webkit-transition: all 0.5s 0.3s;
transition: all 0.5s 0.3s;
opacity: 0;
font-size: 0;
padding: 10%;
background-color: transparent;
}
.portfolio_main_holder article .item_holder.thin_plus_only:hover .text_holder,
.portfolio_slider li:hover .item_holder.thin_plus_only .text_holder {
-ms-transform: translate(0, 0);
-moz-transform: translate(0, 0);
-o-transform: translate(0, 0);
transform: translate(0, 0);
-webkit-transform: translate(0, 0);
-webkit-transition: all 0.2s 0.1s;
transition: all 0.2s 0.1s;
font-size: 150px;
opacity: 1
}
.portfolio_main_holder .item_holder.thin_plus_only .image_holder {
z-index: 2;
}
.portfolio_main_holder .item_holder.thin_plus_only .portfolio_shader {
z-index: 3;
transition: opacity 0.5s;
-webkit-transition: opacity 0.5s;
opacity: 0;
}
.portfolio_main_holder article .item_holder.thin_plus_only:hover .portfolio_shader,
.portfolio_slider li.item:hover .item_holder.thin_plus_only .portfolio_shader {
opacity: 1
}
/* #End of thin plus only hover
========================================================================== */
/* #Slow Zoom hover
========================================================================== */
.portfolio_main_holder .item_holder.slow_zoom .text_holder {
width: 100%;
font-size: 18px;
left: 0;
height: 100%;
margin: 0;
top: 0;
box-sizing: border-box;
z-index: 5;
-webkit-transition: opacity 0.6s 0.3s;
transition: opacity 0.6s 0.3s;
opacity: 0;
padding: 10%;
background-color: transparent;
}
.portfolio_main_holder article .item_holder.slow_zoom:hover .text_holder {
opacity: 1
}
.portfolio_with_hover_text .portfolio_main_holder article .item_holder.slow_zoom .separator {
background-color: #fff;
}
.portfolio_main_holder .item_holder.slow_zoom .image_holder img {
-webkit-transform: scale(1.01);
-moz-transform: scale(1.01);
-o-transform: scale(1.01);
-ms-transform: scale(1.01);
transform: scale(1.01);
-webkit-transition: all 2s cubic-bezier(0.21, 1, 0.12, 1) 0s;
transition: all 2s cubic-bezier(0.23, 1, 0.12, 1) 0s;
}
.portfolio_main_holder article .item_holder.slow_zoom:hover .image_holder img {
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
-o-transform: scale(1.1);
-ms-transform: scale(1.1);
transform: scale(1.1);
-webkit-transition: all 5s cubic-bezier(0.21, 1, 0.12, 1) 0s;
transition: all 5s cubic-bezier(0.21, 1, 0.12, 1) 0s;
}
.portfolio_main_holder .item_holder.slow_zoom .portfolio_shader {
z-index: 3;
opacity: 0;
-webkit-transition: all 5s cubic-bezier(0.21, 1, 0.12, 1) 0s;
transition: all 5s cubic-bezier(0.21, 1, 0.12, 1) 0s;
}
.portfolio_main_holder article .item_holder.slow_zoom:hover .portfolio_shader,
.portfolio_slider li.item:hover .item_holder.slow_zoom .portfolio_shader {
opacity: 1;
}
.portfolio_main_holder .item_holder.slow_zoom .icons_holder {
position: absolute;
bottom: 0;
opacity: 0;
z-index: 20;
-webkit-transition: opacity .3s, -webkit-transform .3s;
transition: opacity .3s, transform .3s;
}
.portfolio_main_holder .item_holder.slow_zoom .icons_holder.left {
left: 0;
-webkit-transform: translate3d(-10px, -10px, 0);
-ms-transform: translate3d(-10px, 10px, 0);
-moz-transform: translate3d(-10px, 10px, 0);
-o-transform: translate3d(-10px, 10px, 0);
transform: translate3d(-10px, 10px, 0);
}
.portfolio_main_holder .item_holder.slow_zoom .icons_holder.right {
right: 0;
-webkit-transform: translate3d(10px, 10px, 0);
-ms-transform: translate3d(10px, 10px, 0);
-moz-transform: translate3d(10px, 10px, 0);
-o-transform: translate3d(10px, 10px, 0);
transform: translate3d(10px, 10px, 0);
}
.portfolio_main_holder .item_holder.slow_zoom .icons_holder.center {
width: 100%;
text-align: center;
-webkit-transform: translate3d(0, 10px, 0);
-ms-transform: translate3d(0, 10px, 0);
-moz-transform: translate3d(0, 10px, 0);
-o-transform: translate3d(0, 10px, 0);
transform: translate3d(0, 10px, 0);
}
.portfolio_main_holder article:hover .item_holder.slow_zoom .icons_holder,
.portfolio_slider li.item:hover .item_holder.slow_zoom .icons_holder {
opacity: 1;
display: block;
-webkit-transform: translate3d(0, 0, 0);
-ms-transform: translate3d(0, 0, 0);
-moz-transform: translate3d(0, 0, 0);
-o-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
.portfolio_main_holder .item_holder.slow_zoom .icons_holder a {
display: inline-block;
width: 40px;
height: 40px;
line-height: 40px;
text-align: center;
vertical-align: middle;
margin: 0;
font-size: 15px;
color: #fff;
background: #1abc9c;
transition: all .4s;
-webkit-transition: all .4s;
}
.portfolio_main_holder .item_holder.slow_zoom .icons_holder a:hover {
background: #fff;
color: #000;
}
.portfolio_main_holder .item_holder.slow_zoom .image_holder {
z-index: 2;
overflow: hidden;
}
/* #End of soom zhover
========================================================================== */
/* #Split up hover
========================================================================== */
.portfolio_main_holder .item_holder.split_up .text_holder {
width: 100%;
font-size: 18px;
left: 0;
height: 100%;
margin: 0;
top: 0;
box-sizing: border-box;
z-index: 5;
-webkit-transition: opacity 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);
transition: opacity 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);
opacity: 0;
padding: 10%;
background-color: transparent;
}
.portfolio_main_holder article .item_holder.split_up:hover .text_holder {
-webkit-transition: transform 0.3s ease;
transition: transform 0.3s ease;
opacity: 1;
}
.portfolio_main_holder .item_holder.split_up .portfolio_title {
-ms-transform: translateY(0);
-moz-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
-webkit-transform: translateY(0);
transition: 0.2s;
-webkit-transition: 0.2s;
}
.portfolio_main_holder article .item_holder.split_up:hover .portfolio_title {
-ms-transform: translateY(-4px);
-moz-transform: translateY(-4px);
-o-transform: translateY(-4px);
transform: translateY(-4px);
-webkit-transform: translateY(-4px);
}
.portfolio_main_holder .item_holder.split_up .project_category {
-ms-transform: translateY(-4px);
-moz-transform: translateY(-4px);
-o-transform: translateY(-4px);
transform: translateY(-4px);
-webkit-transform: translateY(-4px);
transition: 0.2s;
-webkit-transition: 0.2s;
}
.portfolio_main_holder article:hover .item_holder.split_up .project_category {
-ms-transform: translateY(0);
-moz-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
-webkit-transform: translateY(0);
}
.portfolio_with_hover_text .portfolio_main_holder article:hover .item_holder.split_up .separator {
background-color: #fff;
}
.portfolio_main_holder .item_holder.split_up .image_holder {
z-index: 2;
}
.portfolio_main_holder .item_holder.split_up .portfolio_shader,
.portfolio_slider li.item .item_holder.split_up .portfolio_shader {
height: 0;
display: block;
left: 0;
opacity: 0;
position: absolute;
top: 50%;
-webkit-transition: all 0.2s ease-out;
transition: all 0.2s ease-out;
width: 100%;
z-index: 3;
}
.portfolio_main_holder article .item_holder.split_up:hover .portfolio_shader,
.portfolio_slider li.item:hover .item_holder.split_up .portfolio_shader {
height: 100%;
top: 0;
opacity: 1;
}
/* #End of split up hover
========================================================================== */
/* #Cursor change hover
========================================================================== */
.portfolio_main_holder .item_holder.cursor_change_hover a.portfolio_link_class {
z-index: 6;
cursor: url("img/cursor_plus.cur"), crosshair;
cursor: url("img/cursor_plus.png") 22 22, crosshair;
}
.portfolio_main_holder .cursor_img {
position: absolute;
z-index: 1000;
}
.portfolio_main_holder .item_holder.cursor_change_hover .image_holder {
z-index: 2
}
.portfolio_main_holder .item_holder.cursor_change_hover .text_holder {
padding: 30px;
font-size: 14px;
width: 100%;
height: 100%;
position: absolute;
left: 0;
background-color: transparent;
top: 0;
text-align: center;
box-sizing: border-box;
opacity: 0;
-webkit-transition: 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);
transition: 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
-webkit-transform: scale(0.8);
-ms-transform: scale(0.8);
-moz-transform: scale(0.8);
-o-transform: scale(0.8);
transform: scale(0.8);
z-index: 4;
}
.portfolio_main_holder article:hover .item_holder.cursor_change_hover .text_holder,
.portfolio_slider li.item:hover .item_holder.cursor_change_hover .text_holder {
opacity: 1;
-webkit-transform: scale(1);
-ms-transform: scale(1);
-moz-transform: scale(1);
-o-transform: scale(1);
transform: scale(1);
}
.portfolio_with_hover_text .portfolio_main_holder .item_holder.cursor_change_hover .separator {
background-color: #fff
}
.portfolio_main_holder .item_holder.cursor_change_hover .text_holder_outer {
display: table;
width: 100%;
height: 100%;
}
.portfolio_main_holder .item_holder.cursor_change_hover .text_holder_inner {
display: table-cell;
vertical-align: middle;
text-align: center;
}
.portfolio_main_holder .item_holder.cursor_change_hover .portfolio_shader {
z-index: 3;
-webkit-transition: opacity 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);
transition: opacity 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);
opacity: 0;
}
.portfolio_main_holder article .item_holder.cursor_change_hover:hover .portfolio_shader,
.portfolio_slider li.item:hover .item_holder.cursor_change_hover .portfolio_shader {
opacity: 1
}
/* #End of cursor change hover
========================================================================== */
/* ==========================================================================
#End of Portfolio Hover effects styles
========================================================================== */
/* ==========================================================================
Tabs shortcode start styles
========================================================================== */
.q_tabs{
display: block;
visibility: hidden;
}
.q_tabs .tabs-nav {
list-style: none outside none;
margin: 0;
overflow: hidden;
padding: 0;
display: inline-block;
position: relative;
}
.q_tabs .tabs-nav li {
margin: 0;
overflow: hidden;
padding: 0;
position: relative;
display: inline-block;
float: left;
}
.q_tabs .tabs-nav li a {
height: 40px;
line-height: 40px;
display: block;
margin: 0;
padding: 0 14px;
font-size: 13px;
text-decoration: none;
font-style: normal;
color: #b4b4b4;
text-transform: uppercase;
letter-spacing: 1px;
font-weight: 700;
-webkit-transition: color 0.3s ease-in-out;
-moz-transition: color 0.3s ease-in-out;
transition: color 0.3s ease-in-out;
}
.q_tabs .tabs-nav li.active a {
color: #303030;
}
.q_tabs .tabs-nav li.active a:hover,
.q_tabs .tabs-nav li a:hover {
color: #1abc9c;
}
/* Horizontal tabs styles
========================================================================== */
.q_tabs.horizontal.center {
text-align: center;
}
.q_tabs.horizontal.left {
text-align: left;
}
.q_tabs.horizontal.right {
text-align: right;
}
.q_tabs.horizontal .tabs-container {
padding-top: 4px;
text-align: left;
}
.q_tabs.horizontal.right .tabs-container {
text-align: right;
}
.q_tabs.horizontal .tabs-nav li:first-child a {
padding-left: 0;
}
/* Vertical tabs styles
========================================================================== */
.q_tabs.vertical .tabs-nav {
width: 24.02957486136784%;
margin: 0;
}
.q_tabs.vertical.right .tabs-nav {
float: right;
}
.q_tabs.vertical.left .tabs-nav {
float: left;
}
.q_tabs.vertical .tabs-nav li {
display: block;
width: 100%;
}
.q_tabs.vertical .tabs-nav li a {
text-align: center;
height: auto;
line-height: normal;
padding: 13px 17px;
}
.q_tabs.vertical .tabs-nav li.active a {
border: 2px solid #e3e3e3;
padding: 11px 14px 11px 14px;
position: relative;
z-index: 100;
}
.q_tabs.vertical.left .tabs-nav li.active a {
border-right-color: #fff;
-webkit-border-top-left-radius: 4px;
-webkit-border-bottom-left-radius: 4px;
-moz-border-radius-topleft: 4px;
-moz-border-radius-bottomleft: 4px;
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
}
.q_tabs.vertical.right .tabs-nav li.active a {
border-left-color: #fff;
-webkit-border-top-right-radius: 4px;
-webkit-border-bottom-right-radius: 4px;
-moz-border-radius-topright: 4px;
-moz-border-radius-bottomright: 4px;
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
}
.q_tabs.vertical .tabs-container {
width: 73.68576709796673%;
}
.q_tabs.vertical.left .tabs-container {
float: left;
text-align: left;
}
.q_tabs.vertical.right .tabs-container {
float: right;
text-align: right;
}
.q_tabs.vertical .tab-content {
position: relative;
z-index: 50;
}
.q_tabs.vertical.left .tab-content {
padding-left: 17px;
border-left: 2px solid #e3e3e3;
left: -2px;
}
.q_tabs.vertical.right .tab-content {
padding-right: 17px;
border-right: 2px solid #e3e3e3;
right: -2px;
}
/* Boxed tabs styles
========================================================================== */
.q_tabs.boxed {
text-align: left;
}
.q_tabs.boxed .tabs-nav {
display: block;
}
.q_tabs.boxed .tabs-nav li a {
border-bottom: none;
position: relative;
z-index: 200;
}
.q_tabs.boxed .tabs-nav li.active a {
position: relative;
z-index: 100;
line-height: 40px;
height: 40px;
padding: 0 12px;
border: 2px solid #e3e3e3;
border-bottom-color: #fff;
-webkit-border-top-left-radius: 3px;
-moz-border-radius-topleft: 3px;
border-top-left-radius: 3px;
-webkit-border-top-right-radius: 3px;
-moz-border-radius-topright: 3px;
border-top-right-radius: 3px;
}
.q_tabs.boxed .tabs-container {
overflow: hidden;
text-align: left;
padding: 19px 0 0;
border-top: 2px solid #e3e3e3;
position: relative;
top: -2px;
z-index: 50;
}
/* ==========================================================================
Tabs shortcode end styles
========================================================================== */
/* ==========================================================================
Accordion shortcode start styles
========================================================================== */
.q_accordion_holder{
position: relative;
display: block;
visibility: hidden;
margin: 0 0 30px;
}
.q_accordion_holder.accordion.with_icon {
border-top: 1px solid #eaeaea;
}
.q_accordion_holder.accordion .ui-accordion-header {
cursor: pointer;
position: relative;
display: block;
line-height: 2em;
min-height: 45px;
padding: 0;
margin: 0 0 5px;
-webkit-transform: translateZ(0px);
-moz-transform: translateZ(0px);
box-sizing: border-box;
}
.q_accordion_holder.accordion h3.ui-accordion-header {
padding-top: 3px;
}
.q_accordion_holder.accordion h4.ui-accordion-header {
padding-top: 5px;
}
.q_accordion_holder.accordion h5.ui-accordion-header {
font-size: 14px;
padding-top: 9px;
}
.q_accordion_holder.accordion h6.ui-accordion-header {
padding-top: 10px;
}
.q_accordion_holder.accordion.with_icon h3.ui-accordion-header {
padding-bottom: 3px;
}
.q_accordion_holder.accordion.with_icon h4.ui-accordion-header {
padding-bottom: 5px;
}
.q_accordion_holder.accordion.with_icon h5.ui-accordion-header {
padding-bottom: 9px;
}
.q_accordion_holder.accordion.with_icon h6.ui-accordion-header {
padding-bottom: 10px;
}
.q_accordion_holder.accordion.with_icon .ui-accordion-header{
line-height: 3em;
min-height: 3em;
margin: 0;
border: 1px solid #eaeaea;
border-top: 0 !important;
-webkit-transition: border-bottom 0.3s ease-in-out;
-moz-transition: border-bottom 0.3s ease-in-out;
-o-transition: border-bottom 0.3s ease-in-out;
-ms-transition: border-bottom 0.3s ease-in-out;
}
.q_accordion_holder.accordion .ui-accordion-header,
.q_accordion_holder.accordion.with_icon .ui-accordion-header {
-webkit-transition: color 0.3s ease-in-out, background-color 0.3s ease-in-out;
-moz-transition: color 0.3s ease-in-out, background-color 0.3s ease-in-out;
-ms-transition: color 0.3s ease-in-out, background-color 0.3s ease-in-out;
-o-transition: color 0.3s ease-in-out, background-color 0.3s ease-in-out;
transition: color 0.3s ease-in-out, background-color 0.3s ease-in-out;
color: #303030;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 1px;
}
.q_accordion_holder.accordion .ui-accordion-header:hover {
color: #1abc9c;
}
.q_accordion_holder.accordion.with_icon .ui-accordion-header:last-child {
border-bottom: 0 !important;
}
.q_accordion_holder.accordion.with_icon .ui-accordion-header span.tab-title {
width: 72%;
line-height: 1.5625em;
margin: 0.85em 0 0.85em 20px;
display: inline-block;
}
.q_accordion_holder.accordion.without_icon .ui-accordion-header span.tab-title{
padding: 0 0 0 63px;
display: block;
}
.q_accordion_holder.accordion.with_icon .ui-state-active {
border-bottom-color: transparent;
-webkit-transition: border-bottom 0.3s ease-in-out;
-moz-transition: border-bottom 0.3s ease-in-out;
-o-transition: border-bottom 0.3s ease-in-out;
-ms-transition: border-bottom 0.3s ease-in-out;
}
.q_accordion_holder.accordion.with_icon .ui-state-active,
.q_accordion_holder.accordion .ui-state-active {
-webkit-transition: color 0.3s ease-in-out, background-color 0.3s ease-in-out;
-moz-transition: color 0.3s ease-in-out, background-color 0.3s ease-in-out;
-ms-transition: color 0.3s ease-in-out, background-color 0.3s ease-in-out;
-o-transition: color 0.3s ease-in-out, background-color 0.3s ease-in-out;
transition: color 0.3s ease-in-out, background-color 0.3s ease-in-out;
}
.q_accordion_holder.accordion.with_icon .ui-accordion-header-active,
.q_accordion_holder.with_icon div.accordion_content {
background-color: #fbfbfb;
}
.q_accordion_holder.accordion.with_icon .ui-accordion-header div.icon-wrapper,
.q_accordion_holder .ui-accordion-header .accordion_mark {
float: left;
line-height: 3.25em;
position: relative;
top: 0.09375em;
}
.q_accordion_holder.accordion.without_icon .ui-accordion-header div.icon-wrapper{
display: none !important;
}
.q_accordion_holder.accordion.with_icon .ui-accordion-header i{
margin: 0 0 0 15px;
font-size: 18px;
color: #1abc9c;
}
.q_accordion_holder.accordion .ui-accordion-header .accordion_mark_icon {
display: block;
width: 41px;
height: 41px;
background-image: url(img/plus.png);
background-repeat: no-repeat;
background-position: center;
}
.q_accordion_holder.with_icon .ui-accordion-header.ui-state-active .accordion_icon_mark{
background-image: url(img/minus.png);
}
.q_accordion_holder.accordion .ui-accordion-header .accordion_mark {
display: block;
width: 45px;
height: 45px;
border: 2px solid #e3e3e3;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
-o-border-radius: 3px;
-ms-border-radius: 3px;
border-radius: 3px;
background-color: transparent;
transition: background-color 0.3s ease-in-out;
box-sizing: border-box;
}
.q_accordion_holder.accordion .ui-accordion-header .accordion_mark:hover {
background-image: url('img/button-bg-px.png') !important;
}
.q_accordion_holder.accordion .ui-accordion-header .accordion_mark.left_mark {
position: absolute;
top: 0;
left: 0;
}
.q_accordion_holder.accordion .ui-accordion-header .accordion_mark.right_mark {
position: absolute;
right: 0.65em;
top: 0.65em;
}
.q_accordion_holder.accordion.without_icon .ui-accordion-header .accordion_mark.right_mark,
.q_accordion_holder.accordion.with_icon .ui-accordion-header .accordion_mark.left_mark {
display: none;
}
.q_accordion_holder.accordion .ui-accordion-header.ui-state-active .accordion_mark_icon{
background-image: url(img/minus.png);
}
.q_accordion_holder.accordion .ui-accordion-header.ui-state-active .accordion_mark {
background-color: #e3e3e3;
transition: background-color 0.3s ease-in-out;
}
@media only screen and (-webkit-min-device-pixel-ratio:1.5), only screen and (min--moz-device-pixel-ratio:1.5), only screen and (-o-min-device-pixel-ratio:150/100), only screen and (min-device-pixel-ratio:1.5), only screen and (min-resolution:160dpi) {
.q_accordion_holder.with_icon .accordion_icon_mark,
.q_accordion_holder.accordion .ui-accordion-header .accordion_mark_icon{
-o-background-size: 9px 9px;
-webkit-background-size: 9px 9px;
-moz-background-size: 9px 9px;
background-size: 9px 9px;
background-image: url('img/plus@1_5x.png');
}
.q_accordion_holder.with_icon .ui-accordion-header.ui-state-active .accordion_icon_mark,
.q_accordion_holder.accordion .ui-accordion-header.ui-state-active .accordion_mark_icon{
-o-background-size: 9px 9px;
-webkit-background-size: 9px 9px;
-moz-background-size: 9px 9px;
background-size:9px 9px;
background-image: url('img/minus@1_5x.png');
}
}
@media only screen and (-webkit-min-device-pixel-ratio:2.0), only screen and (min--moz-device-pixel-ratio:2.0), only screen and (-o-min-device-pixel-ratio:200/100), only screen and (min-device-pixel-ratio:2.0), only screen and (min-resolution:210dpi) {
.q_accordion_holder.with_icon .accordion_icon_mark,
.q_accordion_holder.accordion .ui-accordion-header .accordion_mark_icon{
-o-background-size: 9px 9px;
-webkit-background-size:9px 9px;
-moz-background-size: 9px 9px;
background-size: 9px 9px;
background-image: url('img/plus@2x.png');
}
.q_accordion_holder.with_icon .ui-accordion-header.ui-state-active .accordion_icon_mark,
.q_accordion_holder.accordion .ui-accordion-header.ui-state-active .accordion_mark_icon{
-o-background-size: 9px 9px;
-webkit-background-size: 9px 9px;
-moz-background-size: 9px 9px;
background-size: 9px 9px;
background-image: url('img/minus@2x.png');
}
}
.q_accordion_holder.accordion div.accordion_content{
padding: 0 0 0 63px;
margin: 0;
}
.q_accordion_holder.with_icon div.accordion_content {
padding: 0 0 0 50px;
border: 1px solid #eaeaea;
border-top: 0;
}
.q_accordion_holder.accordion.with_icon div.accordion_content.no_icon{
padding: 0 0 0 22px;
}
.q_accordion_holder.accordion div.accordion_content_inner {
padding: 8px 0 25px;
display: block;
}
.q_accordion_holder.with_icon div.accordion_content_inner {
padding: 10px 27px 19px 0;
}
/* Boxed accordion and toggle styles
========================================================================== */
.q_accordion_holder.boxed {
}
.q_accordion_holder.accordion.boxed .ui-accordion-header {
text-align: center;
background-color: #e3e3e3;
}
.q_accordion_holder.boxed .ui-accordion-header .accordion_mark {
display: none;
}
.q_accordion_holder.boxed div.accordion_content {
padding-left: 26px;
}
.q_accordion_holder.boxed div.accordion_content_inner {
padding-top: 20px;
}
/* ==========================================================================
Accordion shortcode end styles
========================================================================== */
/* ==========================================================================
Highlight shortcode start styles
========================================================================== */
/*.highlight{
background-color: #1abc9c;
color: #fff;
padding: 0 3px;
}*/
/* ==========================================================================
Highlight shortcode end styles
========================================================================== */
.testimonials_holder {
text-align: center;
}
.testimonials{
position: relative;
}
.testimonials .testimonial_container {
overflow: hidden;
width: 100%;
background-color: transparent;
text-align: left;
margin: 0 0 16px;
}
.testimonials_holder .flex-direction-nav {
display: block;
position: static;
}
.testimonials_holder .flex-direction-nav li {
display: inline-block;
height: 30px;
margin-top: 37px;
}
.testimonials_holder .flex-direction-nav li:first-child {
margin-right: 5px;
}
.testimonials_holder .flex-direction-nav li:last-child {
margin-left: 4px;
}
.testimonials_holder .flex-direction-nav a {
position: relative;
width: 30px;
height: 30px;
border: 2px solid #303030;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
border-radius: 4px;
opacity: 1;
background-color: transparent;
text-indent: -9999px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
.testimonials_holder .flex-direction-nav a:hover {
background-color: #303030;
}
.testimonials_holder.light .flex-direction-nav a {
border-color: #fff;
}
.testimonials_holder.light .flex-direction-nav a:hover {
background-color: #1abc9c;
border-color: #1abc9c;
}
.testimonials_holder.light .flex-direction-nav a:before {
color: #fff;
}
.testimonials_holder .flex-direction-nav a:before {
font-family: 'FontAwesome', sans-serif;
position: absolute;
height: 26px;
width: 26px;
line-height: 26px;
top: 0;
left: 0;
color: #000;
text-indent: 0;
font-size: 16px;
}
.testimonials_holder .flex-direction-nav a:hover:before {
color: #fff;
}
.testimonials_holder .flex-direction-nav a.flex-prev:before {
content: '\f104';
}
.testimonials_holder .flex-direction-nav a.flex-next:before {
content: '\f105';
}
.testimonials_holder.full_width {
background: none;
}
.content .testimonial_content .container .container_inner {
padding:0px 0px 0px 0px;
}
.testimonial_text_holder {
position: relative;
display: block;
}
.testimonials .author_image_holder {
margin-left: 15px;
position: relative;
}
.author_image_holder .image_holder {
border-radius: 3em;
border: 1px solid #eaeaea;
width: 60px;
height: 60px;
display: inline-block;
float: left;
margin:0 15px 0 0;
overflow: hidden;
}
.testimonials .testimonial_text_inner p.testimonial_author {
font-size: 13px;
color: #303030;
margin-top: 22px;
font-weight: 500;
}
.testimonials .testimonial_text_inner p.testimonial_author span.author_company {
color: #1abc9c;
}
.testimonial_content_inner .testimonial_author .website{
color:#303030;
font-weight:300;
display:block;
}
.testimonial_content_inner .testimonial_author h4{
color:#00a8e8;
}
.testimonial_text_inner .testimonial_name {
display: block;
}
.testimonial_content_inner .testimonial_author .company_position {
color: #1abc9c;
}
.testimonials .testimonial_text_inner {
display: block;
}
.testimonials .testimonial_text_inner p {
line-height: 1.666666666666667em; /* 35px / 13px */
font-size: 21px;
}
.testimonials_holder.standard .testimonials .testimonial_text_inner{
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
}
.testimonials_holder.full_width .testimonials .testimonial_text_inner{
border-left:none;
border-right:none;
position:relative;
text-align:center;
}
.testimonials_holder.full_width .testimonials .testimonial_text_inner p{
margin: 0 0 19px;
}
.testimonial_arrow {
width: 20px;
height: 20px;
display: inline-block;
margin: 0 0 0 -10px;
z-index: 999;
position: relative;
overflow: hidden;
left: 45px;
bottom: 11px;
background-color: #fbfbfb;
border-width: 0 1px 1px 0;
border-style: solid;
border-color: #eaeaea;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
}
.testimonials.transparent .testimonial_text_inner {
background-color: transparent !important;
padding: 0;
border: none;
}
.testimonial_image_holder {
text-align: center;
display: inline-block;
position: relative;
overflow: hidden;
vertical-align: middle;
margin: 0 0 50px;
}
.testimonial_image_holder img{
vertical-align: middle;
}
/* ==========================================================================
Blockquote shortcode start styles
========================================================================== */
blockquote {
position: relative;
padding: 14px 14px 14px 10px;
border-left: 4px solid transparent;
}
blockquote h5 {
line-height: 1.5625em;
text-transform: none;
font-size: 21px;
letter-spacing: normal;
font-weight: 400;
margin: 0 !important;
}
blockquote.with_quote_icon h5 {
padding: 0 0 0 40px;
}
blockquote i.pull-left {
font-size: 22px;
color: #c1c0c0;
margin: 6px 0 0 !important;
}
/* ==========================================================================
Blockquote shortcode end styles
========================================================================== */
/* ==========================================================================
Gallery shortcode styles
========================================================================== */
.gallery_holder{
display: block;
position: relative;
}
.wpb_image_grid .gallery_holder{
width: 100.1%;
}
.gallery_holder ul{
list-style: none;
display: block;
width: 100%;
position: relative;
margin: 0;
padding: 0;
}
.gallery_holder ul li{
position: relative;
display: block;
float: left;
overflow: hidden;
}
.gallery_holder ul li a{
display: block;
position: relative;
-webkit-backface-visibility: hidden;
}
.gallery_holder ul li a {
display: block;
overflow: hidden;
-webkit-transform: translateZ(0px);
-moz-transform: translateZ(0px);
}
.wpb_image_grid .gallery_holder ul li a {
margin-right: -1px;
margin-bottom: -1px !important;
}
.gallery_holder ul li a img {
display: block;
width: 100%;
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-ms-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
-webkit-transform: scale(1, 1);
-moz-transform: scale(1, 1);
-ms-transform: scale(1, 1);
-o-transform: scale(1, 1);
transform: scale(1, 1);
}
.gallery_holder ul li.grayscale a img {
-webkit-filter: grayscale(100%);
-moz-filter: grayscale(100%);
filter: gray;
filter: grayscale(100%);
filter: url(img/desaturate.svg#grayscale);
}
.gallery_holder ul li.grayscale:hover a img {
-webkit-filter: grayscale(0);
filter: none;
}
.gallery_holder ul li:hover a img {
-webkit-transform: scale(1.03, 1.03);
-moz-transform: scale(1.03, 1.03);
-ms-transform: scale(1.03, 1.03);
-o-transform: scale(1.03, 1.03);
transform: scale(1.03, 1.03);
}
.gallery_holder ul li .gallery_hover{
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
display: inline-block;
background-color: #000;
background-color: rgba(0, 0, 0, 0.81);
visibility: visible;
opacity: 0;
filter: alpha(opacity=0);
-webkit-transition: opacity .4s;
-moz-transition: opacity .4s;
-o-transition: opacity .4s;
-ms-transition: opacity .4s;
-webkit-transform: translateZ(0px);
-moz-transform: translateZ(0px);
-webkit-backface-visibility: hidden;
z-index: 1000;
}
.gallery_holder ul li:hover .gallery_hover{
opacity: 1;
filter: alpha(opacity=100);
}
.gallery_holder ul li .gallery_hover i{
position: absolute;
top: 50%;
left: 50%;
margin: -15px 0 0 -15px;
font-size: 30px;
color: #fff;
width: 30px;
height: 30px;
line-height:30px;
text-align: center;
display: inline-block;
}
.gallery_holder ul.v5 li,
.wpb_gallery_slides .gallery_holder ul.v5 li{
width: 20%;
margin: 0;
}
.gallery_holder ul.v4 li,
.wpb_gallery_slides .gallery_holder ul.v4 li{
width: 25%;
margin: 0;
}
.gallery_holder ul.v3 li,
.wpb_gallery_slides .gallery_holder ul.v3 li{
width: 33.33333333333333%;
margin: 0;
}
.gallery_holder ul.v2 li,
.wpb_gallery_slides .gallery_holder ul.v2 li{
width: 50%;
margin: 0;
}
/*With space gallery*/
.gallery_holder .gallery_with_space ul li,
.wpb_gallery_slides .gallery_holder .gallery_with_space ul li{
margin-bottom: 2%;
}
.gallery_holder .gallery_with_space ul li:last-child,
.wpb_gallery_slides .gallery_holder .gallery_with_space ul li:last-child{
margin-bottom: 0;
}
.gallery_holder ul.gallery_with_space.v2 li,
.wpb_gallery_slides .gallery_holder ul.gallery_with_space.v2 li
{
width: 49%;
margin: 0 2% 2% 0;
}
.gallery_holder ul.gallery_with_space.v2 li:nth-child(2n),
.wpb_gallery_slides .gallery_holder ul.gallery_with_space.v2 li:nth-child(2n){
margin-right: 0;
}
.gallery_holder ul.gallery_with_space.v3 li,
.wpb_gallery_slides .gallery_holder ul.gallery_with_space.v3 li{
width: 32%;
margin: 0 2% 2% 0;
}
.gallery_holder ul.gallery_with_space.v3 li:nth-child(3n),
.wpb_gallery_slides .gallery_holder ul.gallery_with_space.v3 li:nth-child(3n){
margin-right: 0;
}
.gallery_holder ul.gallery_with_space.v4 li,
.wpb_gallery_slides .gallery_holder ul.gallery_with_space.v4 li{
width: 23.5%;
margin: 0 2% 2% 0;
}
.gallery_holder ul.gallery_with_space.v4 li:nth-child(4n),
.wpb_gallery_slides .gallery_holder ul.gallery_with_space.v4 li:nth-child(4n){
margin-right: 0;
}
.gallery_holder ul.gallery_with_space.v5 li,
.wpb_gallery_slides .gallery_holder ul.gallery_with_space.v5 li{
width: 18.4%;
margin: 0 2% 2% 0;
}
.gallery_holder ul.gallery_with_space.v5 li:nth-child(5n),
.wpb_gallery_slides .gallery_holder ul.gallery_with_space.v5 li:nth-child(5n){
margin-right: 0;
}
/* ==========================================================================
Enf of gallery shortcode styles
========================================================================== */
/* ==========================================================================
Single image shortcode styles
========================================================================== */
.wpb_content_element.wpb_single_image img{
vertical-align: middle;
}
/* ==========================================================================
Enf of single image shortcode styles
========================================================================== */
/* ==========================================================================
Dropcaps shortcodes styles
========================================================================== */
.q_dropcap{
position: relative;
display: inline-block;
float: left;
height: 48px;
width: 48px;
line-height: 48px;
font-size: 23px;
color: #1abc9c;
text-align: center;
margin: 5px 20px 0 0;
border: 1px solid transparent;
}
.q_dropcap.circle,
.q_dropcap.square{
margin: 5px 20px 0 0;
font-size: 22px;
background-color: #1abc9c;
border: 1px solid transparent;
color: #fff;
font-weight: 300;
}
.q_dropcap.normal{
font-weight: 700;
position: relative;
left: 8px;
}
.q_dropcap.circle {
-webkit-border-radius: 2em;
-moz-border-radius: 2em;
-ms-border-radius: 2em;
-o-border-radius: 2em;
border-radius: 2em;
}
.q_dropcap.square {
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
}
/* ==========================================================================
Message box shortcode styles
========================================================================== */
.q_message {
position: relative;
padding: 26px 30px;
color: #fff;
background-color: #1abc9c;
}
.q_message .q_message_inner{
position: relative;
}
.q_message.with_icon .q_message_icon_holder{
float:left;
padding:0 27px 0 0;
}
.q_message.with_icon .q_message_icon{
display: table;
height: 100%;
}
.q_message.with_icon .q_message_icon_inner {
display: table-cell;
height: 100%;
vertical-align: middle;
}
.q_message.with_icon > i {
line-height: 1em;
}
.q_message.with_icon img {
float: left;
}
.q_message a.close {
position: absolute;
top: -19px;
right: -23px;
line-height: 13px;
color: #fff;
}
.q_message a.close i {
width: 14px;
height: 14px;
display: inline-block;
background-repeat: no-repeat;
background-position: center;
}
.q_message .message_text {
display: table;
height: 100%;
font-weight: 700;
font-size: 18px;
text-transform: uppercase;
letter-spacing: 1px;
}
.q_message .message_text_holder {
padding: 0px 20px 0px 0px;
}
.q_message .message_text_inner {
display: table-cell;
height: 100%;
vertical-align: middle;
}
.q_message.with_icon .message_text_holder {
padding: 0px 20px 0px 0px;
}
/* ==========================================================================
Pricing table shorcode styles
========================================================================== */
.q_price_table {
position: relative;
width: 100%;
padding: 0;
color: #fff;
border-top: 1px solid #ebebeb;
margin-left: 2.5%;
float: left;
}
.qode_pricing_tables.two_columns .q_price_table {
width: 48.75%;
}
.qode_pricing_tables.three_columns .q_price_table {
width: 31.666666666666668%;
}
.qode_pricing_tables.four_columns .q_price_table {
width: 23.125%;
}
.qode_pricing_tables .q_price_table:first-child {
margin-left: 0;
}
.q_price_table .price_table_inner {
background-color: #262626;
position: relative;
}
.q_price_table.active .active_text {
position: absolute;
top: 0;
left: 0;
width: 100%;
text-align: center;
background-color: #1abc9c;
font-size: 13px;
line-height: 31px;
}
.q_price_table.active .price_table_inner > ul {
padding: 31px 0 0;
margin: -31px 0;
}
.price_table_inner ul {
list-style: none outside none;
margin: 0;
padding-left: 0 !important;
}
.price_table_inner ul li {
text-align: center;
margin: 0;
padding: 2px 20px 13px;
}
.price_table_inner ul li.pricing_table_content {
padding: 20px 27px 10px;
}
.price_table_inner ul li.pricing_table_content li {
font-size: 13px;
}
.price_table_inner ul li.pricing_table_content li:last-child {
border-bottom: none;
}
.price_table_inner ul li.prices {
padding-top: 0;
padding-bottom: 3px;
}
.price_table_inner ul li.table_title {
padding: 25px 25px 3px;
}
.price_table_inner ul li.table_title .title_content {
color: #fff;
font-weight: 700;
font-size: 17px;
}
.price_in_table {
text-align: center;
}
.price_in_table .value {
font-size: 20px;
font-weight: 600;
vertical-align: top;
position: relative;
top: 17px;
}
.price_in_table .price {
font-size: 83px;
line-height: 1em;
padding: 0 3px;
font-weight: 200;
vertical-align: middle;
}
.price_in_table .mark {
vertical-align: bottom;
position: relative;
font-size: 16px;
font-weight: 600;
text-transform: uppercase;
top: 10px;
}
.price_table_inner .price_button{
padding: 0 0 32px;
}
.price_button .qbutton{
margin:0 7px;
}
/* ==========================================================================
Icon with text shortcode start styles
========================================================================== */
.q_icon_with_title{
display: block;
position: relative;
}
.q_icon_with_title .icon_holder {
display: inline-block;
position: relative;
z-index: 2;
}
.q_icon_with_title:not(.right) .icon_holder {
float: left;
}
.q_icon_with_title.right .icon_holder {
float: right;
}
.q_icon_with_title .icon_text_holder .icon_title {
display: block;
margin: 0 0 1.08em;
font-weight: 600;
}
.q_icon_with_title.large .icon_text_holder .icon_title {
margin-bottom: 0.35em;
}
.q_icon_with_title .icon_with_title_link {
display: inline-block;
margin: 13px 0 0;
color: #1abc9c;
}
.q_icon_with_title .icon_with_title_link:hover {
color: #303030;
}
.q_icon_with_title .icon_holder.q_icon_animation,
.box_holder_icon_inner.q_icon_animation{
-webkit-transform: scale(0);
-moz-transform: scale(0);
-ms-transform: scale(0);
-o-transform: scale(0);
transform: scale(0);
-webkit-transition: all 0.4s ease;
-moz-transition: all 0.4s ease;
-o-transition: all 0.4s ease;
transition: all 0.4s ease;
-webkit-backface-visibility: hidden;
}
.q_icon_with_title .icon_holder.q_icon_animation.q_show_animation,
.box_holder_icon_inner.q_icon_animation.q_show_animation{
-webkit-transform: scale(1.0);
-moz-transform: scale(1.0);
-ms-transform: scale(1.0);
-o-transform: scale(1.0);
transform: scale(1.0);
}
.q_icon_with_title .icon_holder .fa-stack,
.box_holder_icon_inner .fa-stack,
.q_font_awsome_icon_square,
.q_font_awsome_icon_stack i.fa-stack-base {
border: 2px solid #c0c0c0;
-webkit-transition: all 0.1s linear;
-moz-transition: all 0.1s linear;
-ms-transition: all 0.1s linear;
-o-transition: all 0.1s linear;
transition: all 0.1s linear;
-webkit-backface-visibility: hidden;
-webkit-box-sizing: initial;
-moz-box-sizing: initial;
box-sizing: initial;
}
.q_font_awsome_icon_stack i.fa-stack-base{
border:none;
}
.q_icon_with_title .icon_text_holder{
position: relative;
}
.q_icon_with_title span.fa-stack .qode_iwt_icon_element,
.q_box_holder.with_icon span.fa-stack .qode_iwt_icon_element {
font-size: 0.7em;
color: #c0c0c0;
-webkit-transition: all 0.1s linear;
-moz-transition: all 0.1s linear;
-ms-transition: all 0.1s linear;
-o-transition: all 0.1s linear;
transition: all 0.1s ease-in-out;
}
.q_icon_with_title.circle span.fa-stack .qode_iwt_icon_element {
font-size: 0.9em;
}
.q_icon_with_title span.fa-stack.custom-font .qode_iwt_icon_element {
font-size: 0.7em;
}
.q_icon_with_title .icon_text_inner{
padding: 0 0 18px;
}
.q_icon_with_title .icon_title_holder {
display: table;
width: 100%;
height: 100%;
margin:0 0 12px;
}
.q_icon_with_title .icon_title_holder .icon_holder{
display: table-cell;
text-align: center;
height: 100%;
vertical-align: middle;
float:none;
padding:0 15px 0 0;
box-sizing: content-box;
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box;
}
.q_icon_with_title .icon_title_holder .icon_holder > span {
position: relative;
top: 2px;
}
.q_icon_with_title .icon_text_holder .icon_title_holder .icon_title {
display: table-cell;
margin: 0 0 0;
vertical-align: middle;
width: 100%;
}
.q_font_awsome_icon_square .qode_icon_element {
color: #fff;
}
.q_font_awsome_icon_stack .qode_icon_element {
color: #fff;
}
.qode_icon_shortcode.fa-stack a {
display: block;
width: 100%;
height: 100%;
}
.qode_icon_shortcode.fa-stack .qode_icon_element {
display: block;
line-height: inherit;
}
.touch .no_animation_on_touch .q_icon_animation{
-webkit-transform: scale(1.0);
-moz-transform: scale(1.0);
-ms-transform: scale(1.0);
-o-transform: scale(1.0);
transform: scale(1.0);
}
/* Icon center styles
========================================================================== */
/**
* Styles when icon is in center. Can be in a box or not
*/
.q_icon_with_title.center{
text-align: center;
}
.q_icon_with_title.center.center .icon_holder{
float: none;
display: block;
margin: 0 0 20px;
}
.q_icon_with_title.custom_icon_image.center .icon_holder{
margin: 0 0 13px;
}
.q_icon_with_title.center .icon_holder{
width: 100% !important;
}
.q_icon_with_title.center .icon_holder .font_awsome_icon i {
color: #7b7b7b;
-webkit-transition: color 0.3s ease-in-out;
-moz-transition: color 0.3s ease-in-out;
-o-transition: color 0.3s ease-in-out;
transition: color 0.3s ease-in-out;
}
.q_icon_with_title.center .icon_holder .font_awsome_icon i:hover {
color: #1abc9c;
}
/* End of icon center styles
========================================================================== */
/* Generic icon styles
========================================================================== */
.q_icon_with_title.boxed .icon_holder .fa-stack,
.q_font_awsome_icon_square {
background-color: #1abc9c;
border-radius: 4px;
text-align: center;
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
-webkit-backface-visibility: hidden;
}
.q_box_holder.with_icon .box_holder_icon_inner .fa-stack i.fa-stack-base{
color: #1abc9c;
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
-webkit-backface-visibility: hidden;
}
.q_icon_with_title.square .icon_holder .fa-stack,
.box_holder_icon_inner.square .fa-stack
{
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.q_font_awsome_icon_square{
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.q_icon_with_title.square .icon_holder .fa-stack:hover,
.box_holder_icon_inner.square .fa-stack:hover,
.box_holder_icon_inner.circle .fa-stack:hover,
.circle .icon_holder .fa-stack:hover{
background-color: #1abc9c;
border-color: transparent !important;
}
.q_font_awsome_icon_stack .fa-circle,
.q_icon_with_title.boxed .icon_holder .fa-stack {
color: #1abc9c;
-webkit-transition: color 0.4s ease-in-out;
-moz-transition: color 0.4s ease-in-out;
-o-transition: color 0.4s ease-in-out;
transition: color 0.4s ease-in-out;
}
.q_icon_with_title.circle .icon_holder .fa-stack:hover i.fa-circle,
.q_font_awsome_icon_stack:hover .fa-circle,
.q_box_holder.with_icon .box_holder_icon_inner .fa-stack:hover i.fa-stack-base {
color: #f3f3f3 !important;
}
.q_icon_with_title.boxed .icon_holder .fa-stack {
-webkit-transition: background-color 0.2s ease-in-out;
-moz-transition: background-color 0.2s ease-in-out;
-o-transition: background-color 0.2s ease-in-out;
transition: background-color 0.2s ease-in-out;
}
.q_icon_with_title.circle .icon_holder .fa-stack:hover .qode_iwt_icon_element,
.q_icon_with_title.square .icon_holder .fa-stack:hover .qode_iwt_icon_element,
.q_font_awsome_icon_stack:hover i:last-child,
.q_icon_with_title.boxed .icon_holder .fa-stack:hover i,
.q_box_holder.with_icon span.fa-stack:hover i:last-child,
.q_icon_with_title.square .icon_holder .fa-stack:hover i,
.box_holder_icon_inner.square:hover i,
.q_font_awsome_icon_square:hover i {
color: #fff;
}
.q_box_holder.with_icon .tiny span.fa-stack i:last-child {
top: 1px;
}
.q_icon_with_title.with_border_line .icon_text_inner{
border-bottom: 1px solid #fbfbfb;
}
.q_icon_with_title.tiny .icon_text_holder {
padding: 0 0 0 44px;
}
.q_icon_with_title.small .icon_text_holder{
padding: 0 0 0 46px;
}
.q_icon_with_title.left_from_title .icon_text_holder{
padding: 0;
}
.q_icon_with_title.medium .icon_holder,
.q_icon_with_title.tiny.square .icon_holder,
.q_icon_with_title.small.square .icon_holder{
text-align: center;
}
.q_icon_with_title.tiny.square .icon_text_holder,
.q_icon_with_title.medium .icon_text_holder {
padding: 0 0 0 56px;
}
.q_icon_with_title.large .icon_text_holder{
padding: 0 0 0 65px;
}
.q_icon_with_title.large .icon_holder{
text-align: center;
}
.q_icon_with_title.very_large .icon_text_holder{
padding: 0 0 0 84px;
}
.q_icon_with_title.tiny.boxed .icon_text_holder,
.q_icon_with_title.tiny.circle .icon_text_holder,
.q_icon_with_title.tiny.custom_icon_image .icon_text_holder{
padding: 0 0 0 55px;
}
.q_icon_with_title.small.square .icon_text_holder,
.q_icon_with_title.small.boxed .icon_text_holder,
.q_icon_with_title.small.circle .icon_text_holder,
.q_icon_with_title.small.custom_icon_image .icon_text_holder{
padding: 0 0 0 72px;
}
.q_icon_with_title.medium.circle .icon_text_holder {
padding: 0 0 0 119px;
}
.q_icon_with_title.medium.boxed .icon_text_holder,
.q_icon_with_title.medium.custom_icon_image .icon_text_holder,
.q_icon_with_title.medium.square .icon_text_holder{
padding: 0 0 0 95px;
}
.q_icon_with_title.large.boxed .icon_text_holder,
.q_icon_with_title.large.circle .icon_text_holder,
.q_icon_with_title.large.custom_icon_image .icon_text_holder,
.q_icon_with_title.large.square .icon_text_holder{
padding: 0 0 0 122px;
}
.q_icon_with_title.very_large.boxed .icon_text_holder,
.q_icon_with_title.very_large.circle .icon_text_holder,
.q_icon_with_title.very_large.custom_icon_image .icon_text_holder,
.q_icon_with_title.very_large.square .icon_text_holder{
padding: 0 0 0 150px;
}
.q_icon_with_title.left_from_title .icon_text_holder{
padding: 0 0 0 0px !important;
}
.q_icon_with_title.right .icon_text_holder {
padding-left: 0 !important;
text-align: right;
}
.q_icon_with_title.tiny.circle.right .icon_text_holder,
.q_icon_with_title.tiny.custom_icon_image.right .icon_text_holder{
padding: 0 55px 0 0;
}
.q_icon_with_title.small.square.right .icon_text_holder,
.q_icon_with_title.small.circle.right .icon_text_holder,
.q_icon_with_title.small.custom_icon_image.right .icon_text_holder {
padding: 0 72px 0 0;
}
.q_icon_with_title.medium.circle.right .icon_text_holder {
padding: 0 119px 0 0;
}
.q_icon_with_title.medium.custom_icon_image.right .icon_text_holder,
.q_icon_with_title.medium.square.right .icon_text_holder{
padding: 0 95px 0 0;
}
.q_icon_with_title.large.circle.right .icon_text_holder,
.q_icon_with_title.large.custom_icon_image.right .icon_text_holder,
.q_icon_with_title.large.square.right .icon_text_holder{
padding: 0 122px 0 0;
}
.q_icon_with_title.very_large.circle.right .icon_text_holder,
.q_icon_with_title.very_large.custom_icon_image.right .icon_text_holder,
.q_icon_with_title.very_large.square.right .icon_text_holder{
padding: 0 150px 0 0;
}
.q_icon_with_title.tiny.square.right .icon_text_holder {
padding: 0 56px 0 0;
}
.q_icon_with_title.left_from_title .icon_text_holder .icon_holder{
width: auto !important;
}
.q_icon_with_title.left_from_title.custom_icon_image.tiny .icon_text_holder .icon_holder{
width: 35px !important;
}
.q_icon_with_title.left_from_title.custom_icon_image.small .icon_text_holder .icon_holder{
width: 52px !important;
}
.q_icon_with_title.left_from_title.custom_icon_image.medium .icon_text_holder .icon_holder{
width: 78px !important;
}
.q_icon_with_title.left_from_title.custom_icon_image.large .icon_text_holder .icon_holder{
width: 104px !important;
}
.q_icon_with_title.left_from_title.custom_icon_image.very_large .icon_text_holder .icon_holder{
width: 130px !important;
}
.q_icon_with_title.tiny.center .icon_text_holder,
.q_icon_with_title.small.center .icon_text_holder,
.q_icon_with_title.medium.center .icon_text_holder,
.q_icon_with_title.large.center .icon_text_holder,
.q_icon_with_title.very_large.center .icon_text_holder,
.q_icon_with_title.tiny.boxed.center .icon_text_holder,
.q_icon_with_title.tiny.circle.center .icon_text_holder,
.q_icon_with_title.small.boxed.center .icon_text_holder,
.q_icon_with_title.small.circle.center .icon_text_holder,
.q_icon_with_title.medium.boxed.center .icon_text_holder,
.q_icon_with_title.medium.circle.center .icon_text_holder,
.q_icon_with_title.large.boxed.center .icon_text_holder,
.q_icon_with_title.large.circle.center .icon_text_holder,
.q_icon_with_title.very_large.boxed.center .icon_text_holder,
.q_icon_with_title.very_large.circle.center .icon_text_holder,
.q_icon_with_title.tiny.custom_icon_image.center .icon_text_holder,
.q_icon_with_title.small.custom_icon_image.center .icon_text_holder,
.q_icon_with_title.medium.custom_icon_image.center .icon_text_holder,
.q_icon_with_title.large.custom_icon_image.center .icon_text_holder,
.q_icon_with_title.very_large.custom_icon_image.center .icon_text_holder{
padding: 0;
}
.q_icon_with_title.left_from_title .icon_holder{
display: block;
}
.q_icon_with_title.tiny .icon_holder img,
.q_icon_with_title.left_from_title.tiny .icon_holder,
.q_icon_with_title.left_from_title.small.normal_icon .icon_holder{
width: 35px;
}
.q_icon_with_title.small .icon_holder img,
.q_icon_with_title.left_from_title.small .icon_holder,
.q_icon_with_title.left_from_title.large.normal_icon .icon_holder{
width: 52px;
}
.q_icon_with_title.medium .icon_holder img,
.q_icon_with_title.left_from_title.medium .icon_holder,
.q_icon_with_title.left_from_title.very_large.normal_icon .icon_holder{
width: 78px;
}
.q_icon_with_title.large .icon_holder img,
.q_icon_with_title.left_from_title.large .icon_holder{
width: 104px;
}
.q_icon_with_title.very_large .icon_holder img,
.q_icon_with_title.left_from_title.very_large .icon_holder{
width: 130px;
}
.q_icon_with_title.left_from_title.tiny.normal_icon .icon_holder{
width: 25px;
}
.q_icon_with_title.left_from_title.medium.normal_icon .icon_holder{
width: 45px;
}
/* End of generic icon center styles
========================================================================== */
.q_icon_with_title.circle .qode_iwt_icon_holder .qode_iwt_icon_element,
.q_icon_with_title.square .qode_iwt_icon_holder .qode_iwt_icon_element {
display: block;
height: 100%;
line-height: inherit;
text-align: center;
}
/* ==========================================================================
End if icon with text shortcode styles
========================================================================== */
/* ==========================================================================
Icon start shortcode
========================================================================== */
.q_font_awsome_icon {
display: inline-block;
}
.q_font_awsome_icon i,
.q_font_awsome_icon span {
color: #1abc9c;
-webkit-transition: color 0.3s ease-in-out;
-moz-transition: color 0.3s ease-in-out;
-o-transition: color 0.3s ease-in-out;
-ms-transition: color 0.3s ease-in-out;
transition: color 0.3s ease-in-out;
-webkit-backface-visibility: hidden;
}
.q_font_awsome_icon i:hover,
.q_font_awsome_icon span:hover {
color: #1abc9c;
}
.q_font_awsome_icon.pull-center{
display: block;
text-align: center;
}
.q_font_awsome_icon_square.pull-center,
.q_font_awsome_icon_stack.pull-center{
display: block;
margin: 0 auto !important;
}
.q_font_awsome_icon.q_icon_animation,
.q_font_awsome_icon_square.q_icon_animation,
.q_font_awsome_icon_stack.q_icon_animation{
-webkit-transform: scale(0);
-moz-transform: scale(0);
-ms-transform: scale(0);
-o-transform: scale(0);
transform: scale(0);
-webkit-transition: -webkit-transform 0.4s ease;
-moz-transition: -moz-transform 0.4s ease;
-o-transition: -o-transform 0.4s ease;
-ms-transition: -ms-transform 0.4s ease;
transition: transform 0.4s ease;
-webkit-backface-visibility: hidden;
}
.q_font_awsome_icon.q_icon_animation.q_show_animation,
.q_font_awsome_icon_square.q_icon_animation.q_show_animation,
.q_font_awsome_icon_stack.q_icon_animation.q_show_animation{
-webkit-transform: scale(1.0);
-moz-transform: scale(1.0);
-ms-transform: scale(1.0);
-o-transform: scale(1.0);
transform: scale(1.0);
}
#back_to_top span,
.q_social_icon_holder .fa-stack,
.q_icon_with_title.square .icon_holder .fa-stack,
.box_holder_icon_inner.square .fa-stack {
text-align: center;
}
/* ==========================================================================
Icon end shortcode
========================================================================== */
.drop_down .wide .second ul li div.flexslider li:nth-child(4n+1){
clear: none;
}
.drop_down .wide .second ul li .flexslider ul {
padding:0;
border:none;
}
.drop_down .wide .second ul li ul.flex-direction-nav a{
position:absolute;
top:0;
border:none;
margin:0px 0 0 0;
}
.drop_down .wide .second ul li ul.flex-direction-nav{
position:absolute;
top:45px;
left:0px;
overflow:visible;
width: 100%;
}
.drop_down .wide .second ul li div.flexslider{
margin: 0;
}
.drop_down .wide .second ul li .flexslider.widget_flexslider ul.flex-direction-nav li{
width: 100%;
}
.flexslider.widget_flexslider h3,
.drop_down .wide .second ul li ul li .flexslider.widget_flexslider h3,
.drop_down .wide .second ul li ul li .flexslider.widget_flexslider h3 a{
color: #fff;
font-size: 15px;
font-weight: 400;
line-height: 22px;
padding: 10px 0 2px !important;
}
.flexslider.widget_flexslider ul li h3 a,
.drop_down .wide .second .inner ul li.flexslider.widget_flexslider ul li h3 a{
color: #000;
font-size: 18px;
font-weight: 300;
line-height: 22px;
}
.flexslider.widget_flexslider ul.flex-direction-nav a.flex-prev,
.drop_down .wide .second .inner ul li.sub .flexslider.widget_flexslider ul.flex-direction-nav a.flex-prev{
background-color: #000;
background-color: rgba(0, 0, 0, 0.4);
width: 40px;
height: 40px;
line-height: 40px;
}
.drop_down .second .flexslider.widget_flexslider ul.flex-direction-nav i {
display:inline;
}
.drop_down .wide.icons .second .flexslider.widget_flexslider ul.flex-direction-nav i {
width:auto;
float:none;
height:auto;
color: #fff;
}
.flexslider.widget_flexslider ul.flex-direction-nav a.flex-next,
.drop_down .wide .second .inner ul li.sub .flexslider.widget_flexslider ul.flex-direction-nav a.flex-next{
background-color: #000;
background-color: rgba(0, 0, 0, 0.4);
width: 40px;
height: 40px;
line-height: 40px;
}
.flexslider.widget_flexslider ul.flex-direction-nav a.flex-next:hover,
.drop_down .wide .second .inner ul li.sub .flexslider.widget_flexslider ul.flex-direction-nav a.flex-next:hover,
.flexslider.widget_flexslider ul.flex-direction-nav a.flex-prev:hover,
.drop_down .wide .second .inner ul li.sub .flexslider.widget_flexslider ul.flex-direction-nav a.flex-prev:hover{
background-color:#000;
}
.drop_down .wide .second .inner ul li.sub .flexslider.widget_flexslider .menu_recent_post_text {
padding: 10px 0;
}
.drop_down .wide .second .inner ul li.sub .flexslider.widget_flexslider .menu_recent_post_text a{
display: inline;
padding: 0;
}
.drop_down .wide .second .inner ul li.sub .flexslider.widget_flexslider .menu_recent_post_text a:hover{
color:#fff;
}
.drop_down .wide .second .inner ul li.sub .flexslider.widget_flexslider a,
.drop_down .wide .second ul li .flexslider.widget_flexslider a{
padding: 0;
margin: 0;
}
.drop_down .wide .second .inner ul li.sub .flexslider.widget_flexslider a i,
.drop_down .wide .second ul li .flexslider.widget_flexslider a i{
font-size: 20px;
}
ul.flickr_widget{
display: inline-block;
position: relative;
padding:0;
}
ul.flickr_widget li{
float: left;
margin: 0px 5px 5px 0px;
}
ul.flickr_widget li:nth-child(3n){
margin: 0 0 5px;
}
ul.flickr_widget li a img{
float: left;
}
.menu_recent_post_text{
display: block;
}
.menu_recent_post_text a{
display: inline-block !important;
color: #fff !important;
}
/* ==========================================================================
Icon progress bar shortcode start styles
========================================================================== */
.q_progress_bars_icons{
display: block;
position: relative;
opacity: 0;
filter: alpha(opacity=0);
}
.q_progress_bars_icons_inner{
position: relative;
width: 100%;
}
.q_progress_bars_icons_inner .bar{
position: relative;
float: left;
margin: 0px 10px 10px 0px;
}
.q_progress_bars_icons_inner.normal .bar{
margin: 0 0 10px;
}
.q_progress_bars_icons_inner.tiny .bar{
height: 39px;
width: 39px;
}
.q_progress_bars_icons_inner.small .bar{
width: 56px;
height: 56px;
}
.q_progress_bars_icons_inner.medium .bar{
width: 83px;
height: 83px;
}
.q_progress_bars_icons_inner.large .bar{
width: 109px;
height: 109px;
}
.q_progress_bars_icons_inner.very_large .bar{
width: 135px;
height: 135px;
}
.q_progress_bars_icons_inner .bar .bar_noactive,
.q_progress_bars_icons_inner .bar .bar_active{
display: inline-block;
position: absolute;
top: 0px;
left: 0px;
overflow: hidden;
z-index: 50;
}
.q_progress_bars_icons_inner .bar.active .bar_noactive {
z-index: 100;
}
.q_progress_bars_icons_inner.square .bar .bar_noactive,
.q_progress_bars_icons_inner.square .bar .bar_active{
border: 1px solid #d7d7d7;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
}
.q_progress_bars_icons_inner.circle .bar .bar_noactive,
.q_progress_bars_icons_inner.circle .bar .bar_active {
border: 1px solid #d7d7d7;
-webkit-border-radius: 2em;
-moz-border-radius: 2em;
-ms-border-radius: 2em;
-o-border-radius: 2em;
border-radius: 2em;
}
.q_progress_bars_icons_inner.square .bar.active .bar_noactive,
.q_progress_bars_icons_inner.square .bar.active .bar_active,
.q_progress_bars_icons_inner.circle .bar.active .bar_noactive,
.q_progress_bars_icons_inner.circle .bar.active .bar_active {
border: 1px solid #1abc9c;
}
.q_progress_bars_icons_inner.square .bar.active i,
.q_progress_bars_icons_inner.circle .bar.active i,
.q_progress_bars_icons_inner.normal .bar.active i,
.q_progress_bars_icons_inner .bar.active i.fa-circle{
color: #1abc9c;
}
.q_progress_bars_icons_inner.square .bar i,
.q_progress_bars_icons_inner.circle .bar i,
.q_progress_bars_icons_inner.normal .bar i,
.q_progress_bars_icons_inner .bar i.fa-circle{
color: #d7d7d7;
}
/* ==========================================================================
Icon progress bar shortcode end styles
========================================================================== */
.more_facts_outer{
position: relative;
display: block;
height: 0;
overflow: hidden;
}
.more_facts_inner_holder{
position: relative;
display: inline-block;
width: 100%;
vertical-align: middle;
}
.more_facts_inner{
display: inline-block;
width: 100%;
padding: 70px 0 0;
position: relative;
}
.more_facts_holder{
background-color: #f6f6f6;
}
.more_facts_button {
display: block;
position: relative;
margin: 0;
padding: 39px 0 15px;
color: #303030;
font-size: 19px;
line-height: 22px;
cursor: pointer;
z-index: 90;
}
.more_facts_button:hover{
color: #1abc9c;
}
.more_facts_button .more_facts_button_text,
.more_facts_button .more_facts_button_arrow{
display: block;
}
.more_facts_button .more_facts_button_text{
display: block;
font-size: 17px;
font-weight: 600;
letter-spacing: 1px;
text-transform: uppercase;
padding: 0px 0 5px;
}
.more_facts_button .more_facts_button_arrow{
-webkit-transition: -webkit-transform 300ms ease-in-out;
-moz-transition: -moz-transform 300ms ease-in-out;
-ms-transition: -ms-transform 300ms ease-in-out;
-o-transition: -o-transform 300ms ease-in-out;
transition: transform 300ms ease-in-out;
}
.more_facts_button .more_facts_button_arrow.rotate_arrow {
-webkit-transform: rotate(-180deg);
-moz-transform: rotate(-180deg);
-ms-transform: rotate(-180deg);
-o-transform: rotate(-180deg);
transform: rotate(-180deg);
}
.more_facts_button_holder{
display: block;
position: relative;
}
.more_facts_button_holder.left{
text-align: left;
}
.more_facts_button_holder.center{
text-align: center;
}
.more_facts_button_holder.right{
text-align: right;
}
/* ==========================================================================
Oblique section styles
========================================================================== */
.angled-section {
position: absolute;
z-index: 20;
display:block;
}
.angled-section polygon{
fill: #f6f6f6;
}
.angled-section.svg-top {
top: -85px;
}
.angled-section.svg-bottom {
bottom: -85px;
}
.angled-section.svg-footer-bottom {
bottom: 0;
}
.angled-section.svg-title-bottom {
bottom: 0;
}
/* ==========================================================================
End of Oblique section styles
========================================================================== */
.ordered ul, .ordered ol {
counter-reset: li;
display: block;
list-style-type: decimal;
background-position: left center;
background-repeat: no-repeat;
margin: 0 0 30px;
padding: 0 0 0 20px;
}
.ordered ol li {
margin: 0px 0px 21px;
padding: 0 0 0 4px;
color: #303030;
}
/* ==========================================================================
Unordered list shortcode styles
========================================================================== */
.q_list.normal ul > li {
font-weight: 400 !important;
}
.q_list.light ul > li {
font-weight: 300 !important;
}
.q_list.bold ul > li {
font-weight: 600 !important;
}
.q_list.circle ul,
.q_list.number ul{
display: block;
list-style-type: none;
margin: 0;
padding: 0;
}
.q_list.number ul{
counter-reset: li;
}
.q_list.number.circle_number li {
padding-left: 43px;
margin-bottom: 22px;
}
.q_list.circle ul>li,
.q_list.number ul>li{
position: relative;
font-weight: 400;
margin: 0 0 22px;
padding: 0 0 0 22px;
color: #303030;
}
.q_list.circle ul>li:before {
position: absolute;
left: 0;
width: 7px;
height: 7px;
top: 9px;
background-color: #ababab;
display: block;
content: '';
border-radius: 25px;
}
.q_list.number ul>li:before{
height: 20px;
width: 20px;
line-height: 20px;
display: inline-block;
position: absolute;
left: 0;
top: 1px;
padding: 0;
color: #1abc9c;
text-align: center;
content: counter(li, decimal-leading-zero);
counter-increment: li;
font-weight: 500;
}
.q_list.number.circle_number ul>li:before {
color: #fff;
background-color: #1abc9c;
border-radius: 2em;
height: 31px;
width: 31px;
line-height: 31px;
top: -3px;
}
.q_list.circle.animate_list ul li,
.q_list.number.animate_list ul li{
opacity: 0;
filter: alpha(opacity = 0);
top: -40px;
}
.touch .no_animation_on_touch .q_list.circle.animate_list ul li,
.touch .no_animation_on_touch .q_list.number.animate_list ul li{
opacity: 1;
filter: alpha(opacity = 100);
top: 0px;
}
/* ==========================================================================
Social icon shortcode styles
========================================================================== */
.q_social_icon_holder{
display: inline-block;
position: relative;
}
.q_social_icon_holder.normal_social{
margin: 0 6px;
}
header .header_top .q_social_icon_holder {
float: left;
margin: 0;
width: 32px;
}
.q_social_icon_holder .simple_social {
color: #bcbcbc;
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-ms-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
}
.q_social_icon_holder span.simple_social {
display: inline-block;
}
.q_social_icon_holder:hover .simple_social{
color: #1abc9c;
}
header .header_top .q_social_icon_holder a {
display: block;
}
header .header_top .q_social_icon_holder:last-child {
border-right: 0;
}
header .header_top .q_social_icon_holder .simple_social.fa-lg{
font-size: 13px;
}
.q_social_icon_holder .fa-stack {
background-color: #e3e3e3;
border: 0px solid #f0f0f0;
margin: 0.2307692307692308em;
-webkit-transition: all 0.3s ease-out;
-moz-transition: all 0.3s ease-out;
-o-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.q_social_icon_holder.circle_social .fa-stack {
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
border-radius: 50%;
}
.q_social_icon_holder .fa-stack
.header_top .q_social_icon_holder .fa-stack {
background: transparent;
border: 0;
padding: 0;
margin: 0;
box-shadow: none;
border-radius: 0;
font-size: 13px;
}
.header_top .q_social_icon_holder .fa-stack:hover i,
.header_top .q_social_icon_holder .fa-stack:hover span {
color: #fff;
}
.q_social_icon_holder .fa-stack i,
.q_social_icon_holder .fa-stack span {
color: #b9b9b9;
-webkit-transition: color 0.3s ease-out;
-moz-transition: color 0.3s ease-out;
-o-transition: color 0.3s ease-out;
transition: color 0.3s ease-out;
}
.header_top .q_social_icon_holder .fa-stack i,
.header_top .q_social_icon_holder .fa-stack span{
color: #7b7b7b;
}
.q_social_icon_holder.circle_social .fa-stack:hover,
.q_social_icon_holder.square_social .fa-stack:hover {
background-color: #1abc9c;
border-color: transparent;
}
.q_social_icon_holder.circle_social .fa-stack:hover i,
.q_social_icon_holder.circle_social .fa-stack:hover span,
.q_social_icon_holder.square_social .fa-stack:hover i,
.q_social_icon_holder.square_social .fa-stack:hover span {
color: #fff;
}
.q_social_icon_holder .fa-stack i.fa-circle,
.q_social_icon_holder .fa-stack span.fa-circle {
color: #fbfbfb;
}
.q_social_icon_holder .fa-stack.fa-2x {
width:36px;
height:36px;
line-height:36px;
}
.q_social_icon_holder .fa-stack i:last-child,
.q_social_icon_holder .fa-stack span {
font-size: 0.7692307692307692em;
display: block;
line-height: inherit;
}
.q_social_icon_holder .fa-stack.fa-lg i:last-child,
.q_social_icon_holder .fa-stack.fa-lg span {
font-size: 1em;
}
/* ==========================================================================
Social share shortcode styles
========================================================================== */
.social_share_holder{
position: relative;
display: inline-block;
}
.social_share_holder:hover .social_share_title {
cursor: pointer;
}
.social_share_holder:hover .social_share_dropdown{
visibility: visible;
}
.social_share_title{
display: inline-block;
}
.social_share_dropdown{
display: block;
left: 3px;
margin: 0px 0 0;
padding: 10px 0 0 0;
position: absolute;
top: 100%;
width: 35px;
visibility: hidden;
z-index: 950;
}
.social_share_dropdown .inner_arrow {
display: block;
position: absolute;
top: -6px;
left: 8px;
width: 0;
height: 0;
border-color: transparent transparent #323232 transparent;
border-style: solid;
border-width: 9px;
z-index: 999;
}
.social_share_dropdown ul {
list-style: none;
position: relative;
display: block;
background-color: #323232;
z-index: 990;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
padding: 4px 0px !important;
width:35px;
}
.page_share{
position: relative;
}
.social_share_dropdown ul li{
display: block;
position: relative;
text-align: center;
}
.social_share_dropdown ul li.share_title {
display: block;
text-align: center;
color: #fff;
background-color: #1abc9c;
padding: 10px 20px;
}
.social_share_dropdown ul li a {
display: block;
height: 20px;
line-height: 20px;
padding: 5px 0;
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
margin: 0 !important;
}
.social_share_dropdown ul li:last-child a {
border-bottom: 0;
}
.social_share_dropdown ul li i{
font-size: 17px;
width: 22px;
height: 22px;
line-height: 22px;
color: #fff;
text-align: center;
}
.social_share_dropdown ul li img{
width: 22px;
float: left;
margin: 0 13px 0 0;
}
.social_share_dropdown ul li :hover i{
color: #1abc9c;
}
/* ==========================================================================
Social share list shortcode styles
========================================================================== */
.social_share_list_holder ul {
list-style: none;
display: inline-block;
}
.social_share_list_holder ul li {
display: inline;
margin-right: 10px;
}
.social_share_list_holder ul li i {
color: #bcbcbc;
-webkit-transition: color 0.3s ease-in-out;
-moz-transition: color 0.3s ease-in-out;
-ms-transition: color 0.3s ease-in-out;
-o-transition: color 0.3s ease-in-out;
transition: color 0.3s ease-in-out;
}
.social_share_list_holder ul li i:hover {
color: #1abc9c;
}
/* ==========================================================================
Empty Space
========================================================================== */
.vc_empty_space_inner .empty_space_image{
display: block;
height: 100%;
}
/* ==========================================================================
Masonry Gallery
========================================================================== */
.grid-sizer {
width: 25%;
}
.masonry_gallery_holder{
margin: 0 -10px;
opacity: 0;
}
.masonry_gallery_holder .masonry_gallery_item {
box-sizing: border-box;
padding: 10px;
z-index: 1;
}
.masonry_gallery_holder .masonry_gallery_item.parallax_item {
z-index: 0;
}
/*one column shortcode*/
.masonry_gallery_holder.one_column .masonry_gallery_item.square_big,
.masonry_gallery_holder.one_column .masonry_gallery_item.square_small,
.masonry_gallery_holder.one_column .masonry_gallery_item.rectangle_landscape,
.masonry_gallery_holder.one_column .masonry_gallery_item.rectangle_portrait,
.masonry_gallery_holder.one_column .grid-sizer{
width: 100%;
}
/*end of one column shortcode*/
/*two columns shortcode*/
.masonry_gallery_holder.two_columns .masonry_gallery_item.square_small,
.masonry_gallery_holder.two_columns .masonry_gallery_item.rectangle_portrait,
.masonry_gallery_holder.two_columns .grid-sizer{
width: 50%;
}
.masonry_gallery_holder.two_columns .masonry_gallery_item.square_big,
.masonry_gallery_holder.two_columns .masonry_gallery_item.rectangle_landscape{
width: 100%;
}
/*end of two columns shortcode*/
/*three columns shortcode*/
.masonry_gallery_holder.three_columns .masonry_gallery_item.square_small,
.masonry_gallery_holder.three_columns .masonry_gallery_item.rectangle_portrait,
.masonry_gallery_holder.three_columns .grid-sizer{
width: 33.33333333%;
}
.masonry_gallery_holder.three_columns .masonry_gallery_item.square_big,
.masonry_gallery_holder.three_columns .masonry_gallery_item.rectangle_landscape{
width: 66.66666666%;
}
/*end of three columns shortcode*/
.masonry_gallery_item.square_small {
width: 25%;
}
.masonry_gallery_item.square_big {
width: 50%;
}
.masonry_gallery_item.rectangle_landscape {
width: 50%;
}
.masonry_gallery_item.rectangle_portrait {
width: 25%;
}
.masonry_gallery_holder .masonry_gallery_item .masonry_gallery_image_holder{
height: 100%;
width: 100%;
position: relative;
overflow: hidden;
-webkit-transform: translateZ(0px);
-moz-transform: translateZ(0px);
-ms-transform: translateZ(0px);
-o-transform: translateZ(0px);
transform: translateZ(0px);
}
.masonry_gallery_holder .masonry_gallery_item.rectangle_landscape .masonry_gallery_image_holder img{
max-height: inherit;
}
.masonry_gallery_holder .masonry_gallery_item.rectangle_portrait .masonry_gallery_image_holder img{
max-width: inherit;
width: auto;
}
.masonry_gallery_item img {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
vertical-align: middle;
max-height: 100%;
}
.masonry_gallery_item .masonry_gallery_item_outer {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
text-align: center;
box-sizing: border-box;
padding: 10px;
}
.masonry_gallery_item .masonry_gallery_item_inner {
position: relative;
height: 100%;
}
.masonry_gallery_item_inner .masonry_gallery_item_content {
position: absolute;
top: 50%;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
-moz-transform: translateY(-50%);
-o-transform: translateY(-50%);
transform: translateY(-50%);
width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding:0 10% 0 10%;
}
.masonry_gallery_item.with_icon .masonry_gallery_item_inner,
.masonry_gallery_item.with_button .masonry_gallery_item_inner{
background-color: rgba(0,0,0,0.8);
}
.masonry_gallery_item.standard .masonry_gallery_item_inner{
opacity: 0;
background-color: rgba(0,0,0,0.8);
-webkit-transition: opacity 0.3s ease-in-out;
-moz-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
}
.masonry_gallery_item.standard:hover .masonry_gallery_item_inner{
opacity: 1;
}
.masonry_gallery_item_content h3,
.masonry_gallery_item_icon {
color: #fff;
}
.masonry_gallery_item .masonry_gallery_item_icon {
color: #fff;
margin: 0 0 10px;
}
.masonry_gallery_item_content h3 {
text-transform: uppercase;
padding: 0 0 20px 0;
}
.masonry_gallery_item .masonry_gallery_item_button{
margin: 20px 0 0 0;
}
.masonry_gallery_item_content .masonry_gallery_item_text {
color: #818181;
}
/* ==========================================================================
Blog slider
========================================================================== */
.blog_slider, .blog_slides .image_holder {
position: relative;
display: block;
-webkit-backface-visibility: hidden;
}
.blog_slider .blog_slides {
opacity: 0;
}
.blog_slider .image{
position: relative;
display: block;
overflow: hidden;
width: 100%;
-moz-transform: translateZ(0px);
-webkit-transform: translateZ(0px);
}
.blog_slider .blog_slides>li{
background-color: transparent;
position: relative;
margin: 0;
float: left;
}
.blog_slider_holder .item_holder {
position: relative;
overflow: hidden;
}
.blog_slider {
margin: 0;
width: 100.2%;
position: relative;
zoom: 1;
}
.blog_slider .blog_slides img {
width: 100%;
display: block;
-webkit-transition: -webkit-transform 0.15s ease-out;
-moz-transition: -moz-transform 0.15s ease-out;
-ms-transition: -ms-transform 0.15s ease-out;
-o-transition: -o-transform 0.15s ease-out;
transition: transform 0.15s ease-out;
}
.blog_slider .flex-viewport {
max-height: 2000px;
-webkit-transition: all 1s ease;
-moz-transition: all 1s ease;
transition: all 1s ease;
direction: ltr;
}
.blog_slider .blog_slides {
margin: 0;
padding: 0;
list-style: none;
zoom: 1;
}
.blog_slider .flex-direction-nav{
*height: 0;
}
.blog_text_holder{
position:absolute;
width:100%;
height:100%;
opacity: 0;
-webkit-transition: all 1s ease;
-moz-transition: all 1s ease;
transition: all 1s ease;
background-color: rgba(21, 21, 21, 0.78);
}
.blog_slides .blog_text_holder_inner{
color: #fff;
}
.blog_text_holder_outer{
display: table;
table-layout: fixed;
width: 100%;
height: 100%;
text-align: center;
}
.blog_text_holder_inner{
display: table-cell;
vertical-align: middle;
}
.blog_slides .item:hover .blog_text_holder {
opacity: 0.8;
z-index: 20;
}
.blog_slides .blog_text_holder_inner .blog_slider_title a, .blog_slider_date_holder,
.blog_slides .blog_text_holder_inner .blog_slider_categories a,
.blog_slider .blog_slider_post_comments{
color: #fff;
-webkit-transition: color 0.15s ease;
-moz-transition: color 0.15s ease;
transition: color 0.15s ease;
}
.blog_slider .blog_slider_date_holder,
.blog_slider .blog_slider_categories{
display: inline-block;
}
.blog_slider .caroufredsel-next,
.full_width .section_inner .blog_slider .caroufredsel-next{
right: 20px;
}
body.boxed .blog_slider .caroufredsel-next,
body.boxed .full_width .section_inner .blog_slider .caroufredsel-next{
right: 0;
}
.blog_slider .caroufredsel-prev,
.full_width .section_inner .blog_slider .caroufredsel-prev{
left: 20px;
}
body.boxed .blog_slider .caroufredsel-prev,
body.boxed .full_width .section_inner .blog_slider .caroufredsel-prev{
left: 0;
}
.blog_slider .caroufredsel-next,
.full_width .section_inner .blog_slider .caroufredsel-next,
.blog_slider .caroufredsel-prev,
.full_width .section_inner .blog_slider .caroufredsel-prev{
border-radius:50%;
}
.blog_slider .flex-container a:active, .blog_slider .flexslider a:active,
.blog_slider .flex-container a:focus, .blog_slider .flexslider a:focus{
outline: 0;
}
/*Blog Carousel Info in Bottom Always*/
.blog_text_holder.info_bottom{
height: auto;
width: auto;
bottom: 0;
margin: 0 10px 10px;
opacity: 1;
z-index: 20;
}
.blog_slides .item:hover .blog_text_holder.info_bottom{
opacity: 1;
}
.blog_text_holder.info_bottom .blog_text_holder_outer{
padding: 15px 0;
}
.blog_text_holder.info_bottom .blog_text_date_holder{
display: table-cell;
vertical-align: middle;
width: 60px;
border-right: 1px solid #ebebeb;
}
.blog_text_holder.info_bottom .blog_text_holder_inner{
padding: 0 10px;
text-align: left;
}
.blog_text_holder.info_bottom .blog_slider_date_holder span{
display: block;
}
/*Blog slider simple*/
.blog_slider_holder .blog_slider.simple_slider .blog_text_wrapper{
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
.blog_slider.simple_slider .blog_slides .blog_text_holder_inner{
color: #303030;
}
.blog_slider_holder .blog_slider.simple_slider .blog_text_holder_inner2{
position: relative;
width: 50%;
margin: 0 auto;
padding : 8%;
border: 1px solid #fafafa;
background-color: rgba(255,255,255,0.6);
box-sizing: border-box;
-webkit-transition: background-color 0.15s ease-out, border-color 0.15s ease-out;
-moz-transition: background-color 0.15s ease-out, border-color 0.15s ease-out;
-ms-transition: background-color 0.15s ease-out, border-color 0.15s ease-out;
-o-transition: background-color 0.15s ease-out, border-color 0.15s ease-out;
transition: background-color 0.15s ease-out, border-color 0.15s ease-out;
}
.blog_slider_simple_info{
text-align: center;
}
.blog_slider .blog_slider_simple_title{
margin-bottom: 20px;
}
.blog_slider .blog_slider_simple_info a,
.blog_slider .blog_slider_simple_title a{
-webkit-transition: color 0.15s ease;
-moz-transition: color 0.15s ease;
transition: color 0.15s ease;
}
.blog_slider_simple_holder .read_more_wrapper{
margin-top: 20px;
}
.blog_slider_simple_info .post_info_item{
display: inline-block;
padding: 0 5px;
}
.blog_slider_simple_info .post_info_item:not(:first-child):before{
content: '/';
position: relative;
left: -5px;
}
.blog_slider_simple_info .post_info_item.date span{
-webkit-transition: color 0.15s ease-out;
-moz-transition: color 0.15s ease-out;
-ms-transition: color 0.15s ease-out;
-o-transition: color 0.15s ease-out;
transition: color 0.15s ease-out;
}
/* ==========================================================================
Latest posts styles
========================================================================== */
.latest_post_holder{
display: inline-block;
width: 100%;
}
.latest_post_holder.date_in_box .latest_post {
padding-left:85px;
}
.latest_post_holder.minimal .latest_post{
border-bottom: none;
padding-bottom: 0px;
}
.latest_post_holder li:last-child .latest_post {
border-bottom: none;
}
.latest_post_holder .latest_post_date {
float: left;
margin-right: 25px;
width: 59px;
border-radius: 4px;
text-align: center;
margin-top: 5px;
}
.latest_post_holder .latest_post_date .post_publish_day {
font-size: 22px;
color: #fff;
height: 39px;
line-height: 39px;
background-color: #1abc9c;
}
.latest_post_holder .latest_post_date .post_publish_month {
border: 1px solid #eaeaea;
background-color: #f4f4f4;
color: #303030;
font-size: 12px;
-webkit-border-bottom-left-radius: 2px;
-webkit-border-bottom-right-radius: 2px;
-moz-border-radius-bottomleft: 2px;
-moz-border-radius-bottomright: 2px;
border-bottom-left-radius: 2px;
border-bottom-right-radius: 2px;
height: 18px;
line-height: 18px;
}
.latest_post_holder > ul{
list-style: none;
display: inline-block;
width: 100%;
position: relative;
margin: 0;
padding:0;
}
.latest_post_holder > ul > li {
display: block;
position: relative;
padding-top: 15px;
}
.latest_post_holder.minimal > ul > li {
padding-top: 11px;
}
.latest_post_holder.image_in_box .latest_post_holder > ul > li{
padding-top: 15px;
}
.latest_post_holder > ul > li:first-child{
padding-top: 0;
}
.latest_post_holder.boxes > ul,
.latest_post_holder.dividers > ul{
clear: both;
}
.latest_post_holder.boxes > ul > li,
.latest_post_holder.dividers > ul > li{
padding: 0;
float: left;
border: 0;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
margin: 0 2% 0 0;
background-color:#fff;
}
.latest_post_holder.boxes.two_columns > ul > li,
.latest_post_holder.dividers.two_columns > ul > li{
width: 49%;
}
.latest_post_holder.boxes.three_columns > ul > li,
.latest_post_holder.dividers.three_columns > ul > li{
width: 32%;
}
.latest_post_holder.boxes.four_columns > ul > li,
.latest_post_holder.dividers.four_columns > ul > li{
width: 23.5%;
}
.latest_post_holder.boxes.two_columns > ul > li:nth-child(2n),
.latest_post_holder.boxes.three_columns > ul > li:nth-child(3n),
.latest_post_holder.boxes.four_columns > ul > li:nth-child(4n),
.latest_post_holder.dividers.two_columns > ul > li:nth-child(2n),
.latest_post_holder.dividers.three_columns > ul > li:nth-child(3n),
.latest_post_holder.dividers.four_columns > ul > li:nth-child(4n){
margin-right: 0;
}
.latest_post_holder.boxes:not(.one_row) > ul > li,
.latest_post_holder.dividers:not(.one_row) > ul > li{
margin-bottom: 25px;
}
.latest_post_holder.boxes > ul > li .latest_post{
padding: 19px 20px 10px;
border-top: 0;
}
.latest_post_holder.boxes > ul > li .latest_post p.excerpt{
margin: 10px 0 9px;
}
.latest_post_holder.boxes > ul > li .latest_post .post_infos > a,
.latest_post_holder.boxes > ul > li .latest_post .post_infos > span{
display: inline-block;
}
.latest_post_holder.boxes > ul > li .latest_post .latest-vert-separator{
margin-left: 3px;
}
.latest_post_holder.boxes .boxes_image {
overflow: hidden;
}
.latest_post_holder.boxes .boxes_image a {
display: block;
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1);
-webkit-transition: -webkit-transform 0.3s ease-in-out;
-moz-transition: -moz-transform 0.3s ease-in-out;
-ms-transition: -ms-transform 0.3s ease-in-out;
-o-transition: -o-transform 0.3s ease-in-out;
transition: transform 0.3s ease-in-out;
-webkit-backface-visibility: hidden;
}
.latest_post_holder.boxes .boxes_image a img {
vertical-align: top;
}
.latest_post_holder.boxes .boxes_image a:hover {
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
-ms-transform: scale(1.1);
-o-transform: scale(1.1);
transform: scale(1.1);
}
.latest_post_holder.dividers .latest_post_date,
.latest_post_holder.dividers .latest_post_text_inner{
display: table-cell;
}
.latest_post_holder.dividers .latest_post_title{
margin-bottom: 20px
}
.latest_post_holder.dividers .latest_post_inner{
margin: 35px 0 !important;
}
.latest_post_holder.dividers .boxes_image img{
display: inline-block;
vertical-align: middle;
}
.latest_post_holder.dividers .latest_post_date{
margin: 0 15px 0 0;
border-right: 1px solid #ebebeb;
width: 50px;
}
.latest_post_holder.dividers .latest_post_date .latest_post_day{
font-size: 15px;
font-weight: 600;
color: #303030;
}
.latest_post_holder.dividers .post_infos{
margin-top:30px;
padding-top: 20px;
border-top: 1px solid #ebebeb;
}
.latest_post_holder.dividers .post_infos > a:not(:last-child):after,
.latest_post_holder.dividers .post_infos > span:not(:last-child) > a:after{
content: '/';
margin: 0 3px;
}
.latest_post_holder.dividers .latest_post_text_inner .post_infos a{
margin-right: 0;
}
.latest_post_holder > ul > li .date_hour_holder i{
margin-right: 8px;
}
.latest_post,
.latest_post > a,
.latest_post a img{
display: block;
position: relative;
}
.latest_post_image {
width: 95px;
float: left;
}
.latest_post_image img{
width:100%;
float: left;
}
.latest_post_text{
display: block;
width: auto;
}
.latest_post_holder.image_in_box .latest_post_text{
padding:0 0 0 116px;
}
.latest_post_holder.minimal .latest_post_inner{
margin: 0 0 0px !important;
}
.latest_post_inner{
margin: 0 0 10px !important;
}
.latest_post_holder.image_in_box .latest_post_text_inner {
display: table-cell;
vertical-align: middle;
}
.latest_post_holder.image_in_box .latest_post_inner {
display: table;
width: 100%;
margin: 0 0 0 !important;
}
.latest_post_inner .post_infos{
display: block;
font-weight: 500;
}
.latest_post_inner .post_infos a{
color:#303030;
}
.latest_post_inner .post_infos a{
margin: 0 7px 0 0;
}
.latest_post_inner .post_infos a.post_comments{
margin: 0;
}
.latest_post_inner .post_infos a:hover{
color:#1abc9c;
}
.latest_post_holder.minimal .latest_post_inner .post_infos{
margin:0 0 3px 0;
}
.latest_post_holder.image_in_box .latest_post_text .latest_post_title {
margin:-3px 0 2px 0;
}
.latest_post_holder.image_in_box .latest_post_text .excerpt {
margin:0 0 8px 0;
}
.latest_post_holder .post_infos .dots{
padding: 0 7px 0 7px;
}
.latest_post_holder .post_infos .dots i{
font-size: 3px;
vertical-align: middle;
}
/* ==========================================================================
Blog Masonry Shortcode
========================================================================== */
.q_masonry_blog {
margin-bottom: 50px;
transition: none !important;
overflow: visible !important;
opacity: 0;
filter: alpha(opacity=0);
}
.q_masonry_blog article,
.full_width .grid_section .q_masonry_blog article
{
width: 31.2%;
margin: 0 0 20px;
padding: 0;
text-align: left;
vertical-align: top;
z-index: 100;
border: 0;
background-color: #fff;
float: left;
display: block;
}
.full_width .q_masonry_blog article{
width: 18.9%;
margin-left: 0.5%;
margin-right: 0.5%;
}
.q_masonry_blog article.format-link:hover,
.q_masonry_blog article.format-quote:hover{
background-color: #1abc9c;
}
.q_masonry_blog article.format-link .q_masonry_blog_post_title,
.q_masonry_blog article.format-quote .q_masonry_blog_post_title{
padding: 0 0 0 60px;
}
.q_masonry_blog article.format-quote .q_masonry_blog_post_text i.qoute_mark,
.q_masonry_blog article.format-link .q_masonry_blog_post_text i.link_mark {
margin: 7px 0 0;
color: #c0c0c0;
font-size: 36px;
}
.q_masonry_blog article.format-quote .q_masonry_blog_post_text p,
.q_masonry_blog article.format-link .q_masonry_blog_post_text p{
font-size: 21px;
line-height: 35px;
color: #303030;
}
.q_masonry_blog article.format-link:hover .q_masonry_blog_post_info,
.q_masonry_blog article.format-link:hover .q_masonry_blog_post_info a,
.q_masonry_blog article.format-quote:hover .q_masonry_blog_post_info,
.q_masonry_blog article.format-quote:hover .q_masonry_blog_post_info a,
.q_masonry_blog article.format-quote:hover .q_masonry_blog_post_text .quote_author,
.q_masonry_blog article.format-quote:hover .q_masonry_blog_post_text i.qoute_mark,
.q_masonry_blog article.format-link:hover .q_masonry_blog_post_text i.link_mark,
.q_masonry_blog article.format-quote:hover .q_masonry_blog_post_text p a,
.q_masonry_blog article.format-link:hover .q_masonry_blog_post_text p a {
color: #fff;
}
.two_columns_75_25 .q_masonry_blog article,
.two_columns_66_33 .q_masonry_blog article,
.two_columns_33_66 .q_masonry_blog article,
.two_columns_25_75 .q_masonry_blog article{
width:48%;
}
.q_masonry_blog article:hover{
z-index: 200;
}
.q_masonry_blog article .q_masonry_blog_post_image{
margin: 0;
width: auto;
}
.q_masonry_blog article .q_masonry_blog_post_image img{
vertical-align: middle;
}
.q_masonry_blog article .q_masonry_blog_post_info{
margin:15px 0 0 0;
color:#303030;
}
.q_masonry_blog article .q_masonry_blog_post_info a{
color: #bebebe;
}
.q_masonry_blog article .q_masonry_blog_post_info a:hover{
color: #1abc9c;
}
.q_masonry_blog article .quote_author {
font-family: inherit;
font-weight: 400;
display: block;
font-size: 21px;
line-height: 35px;
color: #c0c0c0;
}
.q_masonry_blog article.format-link .q_masonry_blog_post_info,
.q_masonry_blog article.format-quote .q_masonry_blog_post_info{
margin: 0 0 20px;
}
.q_masonry_blog article .q_masonry_blog_post_text{
padding: 20px 15px 20px 15px;
}
.q_masonry_blog article h5{
margin:0 0 10px;
}
.q_masonry_blog article .mejs-controls div.mejs-horizontal-volume-slider{
margin: 0 10px 0 0;
}
.q_masonry_blog article .flexslider{
margin-bottom: 0;
}
/* ==========================================================================
Blog
========================================================================== */
.blog_holder article{
display: inline-block;
width: 100%;
margin: 0 0 60px;
}
.blog_holder.masonry article,
.blog_holder.masonry_full_width article
{
display: block;
float: left;
}
.blog_holder.blog_large_image_simple article{
margin: 0 0 23px;
}
.blog_holder.blog_single article{
margin: 0 0 0px;
}
.blog_holder.blog_small_image article{
margin: 0 0 32px;
}
.single-post .blog_single p {
margin-bottom: 22px;
}
.single-post .blog_single p:last-child {
margin-bottom: 0;
}
.blog_single.blog_holder article .post_text .post_text_inner{
padding-left:0;
padding-right:0;
padding-bottom:0;
background-color:transparent;
}
.blog_single.blog_holder article.format-link .post_text .post_text_inner,
.blog_single.blog_holder article.format-quote .post_text .post_text_inner{
padding: 23px 23px 35px 23px;
background-color: #fff;
margin:0 0 30px 0;
}
.blog_holder article .post_content_holder{
width: 100%;
}
.blog_holder article .post_image,
.blog_holder article .post_image > a,
.blog_holder article .post_image img{
position: relative;
width: 100%;
display: block;
}
.blog_holder article .post_text .post_text_inner{
padding:23px 23px 35px 23px;
background-color:#fff;
}
.blog_holder.blog_large_image_simple article .post_text .post_text_inner{
background-color: transparent;
padding-left: 195px;
padding-right: 195px;
padding-top: 45px;
padding-bottom: 45px;
text-align: center;
}
.blog_holder.masonry article .post_text .post_text_inner,
.blog_holder.masonry_full_width article .post_text .post_text_inner{
padding:17px 15px 18px 15px;
background-color:#fff;
}
.blog_large_image_simple .minimalist_date{
padding-bottom: 9px;
color:#1abc9c;
}
.blog_large_image_simple .separator.small{
margin-top: 22px;
}
.blog_holder article .post_text h5 {
margin:0 0 10px;
}
.blog_holder article .post_text h2 .date{
color:#bebebe;
}
.blog_holder article .post_info {
display:inline-block;
width:100%;
margin:0 0 18px;
color:#bebebe;
font-weight:500;
}
.blog_holder article .post_info a{
color:#bebebe;
}
.blog_holder article .post_info a:hover{
color:#1abc9c;
}
.blog_holder article.format-quote .post_info,
.blog_holder article.format-link .post_info {
margin:0 0 15px;
}
.blog_holder article .post_info .dots{
padding: 0 7px 0 4px;
}
.blog_holder article .post_info .dots i{
font-size: 3px;
vertical-align: middle;
}
.blog_holder article .post_more{
margin:30px 0 0;
}
.blog_holder article .video .mobile-video-image {
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
display: none;
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
z-index: 10;
}
.blog_holder article .video{
position: relative;
}
.blog_holder article .video .video-wrap {
overflow: hidden;
position: relative;
width: 100%;
z-index: 10;
}
.blog_holder article .video .video-wrap .mejs-poster {
background-size: cover!important;
-moz-background-size: cover!important;
-webkit-background-size: cover!important;
-o-background-size: cover!important;
width: 100% !important;
height: 100% !important;
}
.blog_holder article .video .video-wrap .mejs-container {
background-color: transparent!important;
background-image: none!important;
height: 100% !important;
width: 100% !important;
overflow: hidden;
}
.blog_holder article .video .video-wrap .mejs-mediaelement{
background: none !important;
border: 0px !important;
}
.blog_holder article .video .video-wrap .mejs-container .mejs-poster img {
max-width: none!important;
width: 100%!important;
}
.blog_holder article .mejs-container .mejs-controls{
visibility: visible !important;
}
.blog_holder article .mejs-controls .mejs-volume-button .mejs-volume-slider{
display: none !important;
}
.blog_holder article .post_image .mejs-poster img{
display: none !important;
}
.blog_holder article.format-gallery .flexslider{
margin: 0px;
overflow: hidden;
}
.portfolio_single .flexslider{
overflow: hidden;
}
.blog_holder.blog_small_image article .post_image,
.blog_holder.blog_small_image article .post_text{
width:50%;
float:left;
margin:0;
}
.blog_holder.blog_small_image article .post_text .post_text_inner{
padding: 23px 23px 23px 23px;
}
.grid2 .blog_holder.blog_small_image article .post_comments {
margin-left: 0;
}
.blog_holder article .post_description{
margin: 2px 0 10px;
}
/*Blog Large Image With Dividers*/
.blog_holder.blog_large_image_with_dividers .post_text_holder{
display: table;
width: 100%;
height: 100%;
}
.blog_holder.blog_large_image_with_dividers article .post_text .post_text_inner{
padding: 35px 0;
}
.blog_holder.blog_large_image_with_dividers .post_text_holder .blog_column1{
display: table-cell;
vertical-align: top;
text-align: center;
width: 70px;
}
.blog_holder.blog_large_image_with_dividers .post_text_holder .blog_column2{
display: table-cell;
padding: 0 35px 0 20px;
}
.blog_holder.blog_large_image_with_dividers .post_text_holder .blog_column2 > h2{
margin-bottom: 20px;
}
.blog_holder.blog_large_image_with_dividers .post_text_holder .blog_column1 .date{
padding: 0 20px;
border-right: 1px solid #ebebeb;
}
.blog_holder.blog_large_image_with_dividers .post_text_holder .blog_column1 .date > span{
display: block;
}
.blog_holder.blog_large_image_with_dividers .post_text_holder .blog_column1 .date_day{
font-size: 21px;
font-weight: 600;
color: #303030;
padding-bottom: 5px;
}
.blog_holder.blog_large_image_with_dividers article .post_info{
display: table;
width: 100%;
border-top: 1px solid #ebebeb;
padding-top: 15px;
color: #303030;
margin-bottom: 0;
}
.blog_holder.blog_large_image_with_dividers article:not(.format-quote):not(.format-link) .post_info{
margin-top: 30px;
}
.blog_holder.blog_large_image_with_dividers article .post_info .post_info_left{
display: table-cell;
}
.blog_holder.blog_large_image_with_dividers article .post_info .post_info_right{
display: table-cell;
text-align: right;
}
.blog_holder.blog_large_image_with_dividers article .post_info a{
display: inline-block;
color: #303030;
}
.blog_holder.blog_large_image_with_dividers article .post_info a:hover{
color: #1abc9c;
}
.blog_holder.blog_large_image_with_dividers article .post_info .post_info_right > a:not(:first-child):before,
.blog_holder.blog_large_image_with_dividers article .post_info .post_info_right > div:not(:first-child):before{
content: '/ ';
}
.blog_holder.blog_large_image_with_dividers article.format-quote .post_text .post_title,
.blog_holder.blog_large_image_with_dividers article.format-link .post_text .post_title{
padding: 0;
}
.blog_holder.blog_large_image_with_dividers article.format-link .post_text .post_title a{
color: #1abc9c;
text-decoration: underline;
}
.blog_holder.blog_large_image_with_dividers article.format-link .post_text:hover .post_title a{
color: #fff;
}
.blog_holder.blog_large_image_with_dividers article.format-quote .post_text .quote_author{
margin-top:30px;
color: #1abc9c;
}
.blog_holder.blog_large_image_with_dividers article.format-quote .post_info,
.blog_holder.blog_large_image_with_dividers article.format-link .post_info{
margin-top: 20px;
}
.blog_holder.blog_large_image_with_dividers article.format-quote .post_text span.qoute_mark,
.blog_holder.blog_large_image_with_dividers article.format-link .post_text span.link_mark{
font-size: 28px;
padding: 0 18px;
border-right: 1px solid #ebebeb;
color: #303030;
}
.latest_post_inner .post_comments i {
font-size:16px;
color: #adadad;
padding:0 8px 0 0;
}
.latest_post_inner .post_comments:hover i {
color:#1abc9c;
}
.blog_holder article .post_info .post_info_left a.post_author_avatar {
display:inline-block;
float:left;
padding:0 10px 0 0;
}
.blog_holder article .post_info .post_info_left a.post_author {
display:inline-block;
line-height:64px;
float:left;
}
.post_author_avatar img{
border-radius:60px;
border:2px solid #eaeaea;
}
.blog_holder.masonry article .post_description,
.blog_holder.masonry_full_width article .post_description{
margin:0 0 4px;
}
.blog_holder article .post_description a:hover,
.blog_holder article .post_description .post_comments:hover{
color: #1abc9c;
}
.blog_like{
display: inline-block;
}
.blog_like a{
display: block;
line-height: 14px;
}
.blog_like a i{
color: #adadad;
font-size: 16px;
}
.blog_holder.masonry article .blog_like a i,
.blog_holder.masonry_full_width article .blog_like a i,
.blog_holder.blog_single article .blog_like a i,
.blog_holder.blog_large_image article .blog_like a i{
display: inline-block;
}
.blog_like a:hover i,
.blog_like a.liked i,
.blog_like a:hover span{
color: #1abc9c;
}
.blog_like span{
padding: 0 0 0 4px;
}
.blog_holder.masonry article .blog_like span,
.blog_holder.masonry_full_width article .blog_like span,
.blog_holder.blog_single article .blog_like span,
.blog_holder.blog_large_image article .blog_like span{
display: inline-block;
padding:0 0 0 5px;
}
.blog_holder article .post_info .qbutton.dark {
text-transform: none;
}
.blog_share{
display: inline-block;
}
.blog_holder article.format-quote .post_text i.qoute_mark,
.blog_holder article.format-link .post_text i.link_mark{
margin: 7px 0 0;
color:#c0c0c0;
font-size: 36px;
}
.blog_large_image_simple.blog_holder article.format-quote .post_text i.qoute_mark,
.blog_large_image_simple.blog_holder article.format-link .post_text i.link_mark{
margin: 20px 0;
float: none;
}
.blog_holder article.format-quote .post_text .post_title,
.blog_holder article.format-link .post_text .post_title{
padding: 0 0 0 60px;
}
.blog_large_image_simple.blog_holder article.format-quote .post_text .post_title,
.blog_large_image_simple.blog_holder article.format-link .post_text .post_title{
padding: 0 0 0 0px;
}
.blog_holder article.format-quote .post_text .post_title p,
.blog_holder article.format-link .post_text .post_title p{
font-size:21px;
line-height:35px;
color:#303030;
}
.blog_holder article.format-quote .post_text .quote_author{
font-family: inherit;
font-weight: 400;
display:block;
font-size: 21px;
line-height: 35px;
color:#c0c0c0;
}
.blog_holder article.format-link .post_text:hover .post_text_inner,
.blog_holder article.format-quote .post_text:hover .post_text_inner {
background-color: #1abc9c !important; /* it should be important so it can override default color from options */
}
.blog_holder article.format-link .post_text:hover .post_text_inner,
.blog_holder article.format-quote .post_text:hover .post_text_inner {
border-color: #1abc9c !important; /* it should be important so it can override default color from options */
}
.blog_holder article.format-link .post_text:hover .post_info,
.blog_holder article.format-link .post_text:hover .post_info a,
.blog_holder article.format-quote .post_text:hover .post_info,
.blog_holder article.format-quote .post_text:hover .post_info a,
.blog_holder article.format-quote .blog_like a:hover span,
.blog_holder article.format-quote .post_text:hover .quote_author,
.blog_holder article.format-quote .post_text:hover i.qoute_mark,
.blog_holder article.format-link .post_text:hover i.link_mark,
.blog_holder.blog_large_image_with_dividers article.format-quote .post_text:hover span.qoute_mark,
.blog_holder.blog_large_image_with_dividers article.format-link .post_text:hover span.link_mark,
.blog_holder.blog_large_image_with_dividers article.format-quote .post_text:hover .quote_author,
.blog_holder article.format-link .blog_like a:hover span,
.blog_holder article.format-quote .post_text:hover p a,
.blog_holder article.format-link .post_text:hover p a,
.blog_holder.blog_single article.format-quote .post_text:hover p,
.blog_holder.blog_single article.format-link .post_text:hover p,
.blog_large_image_simple article.format-quote .post_text:hover .minimalist_date,
.blog_large_image_simple article.format-link .post_text:hover .minimalist_date,
.blog_holder.masonry article.format-link .post_text:hover .post_info,
.blog_holder.masonry article.format-link .post_text:hover .post_info a,
.blog_holder.masonry article.format-quote .post_text:hover .post_info,
.blog_holder.masonry article.format-quote .post_text:hover .post_info a,
.blog_holder.masonry_full_width article.format-link .post_text:hover .post_info,
.blog_holder.masonry_full_width article.format-link .post_text:hover .post_info a,
.blog_holder.masonry_full_width article.format-quote .post_text:hover .post_info,
.blog_holder.masonry_full_width article.format-quote .post_text:hover .post_info a
{
color:#fff;
}
.blog_holder.blog_single article h2{
display: block;
}
.blog_load_more_button_holder {
text-align: center;
padding:0 0 40px;
}
.blog_load_more_button_loading {
display: none;
}
.single_links_pages{
margin: 50px 0 0;
display: block;
text-align:center;
display: block;
text-decoration: none;
}
.single_links_pages span{
position: relative;
display: inline-block;
width: 38px;
height: 38px;
line-height: 38px;
margin: 0 11px 0 0;
text-align: center;
color: #303030;
text-decoration: none;
text-transform: uppercase;
cursor: pointer;
white-space: nowrap;
border: 2px solid #e3e3e3;
background-color: #e3e3e3;
outline: none;
-o-border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
-ms-border-radius: 4px;
border-radius: 4px;
text-shadow: none;
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-ms-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
}
.single_links_pages a span {
color: #b4b4b4;
background-color:transparent;
border-color: #e5e5e5;
}
.single_links_pages a:hover span{
background-color: #e3e3e3;
border-color: #e3e3e3;
color: #303030;
}
.author_description{
display: block;
position: relative;
margin: 34px 0 0;
background-color:#fff;
padding:23px 23px;
}
.author_description_inner{
display: block;
}
.author_description_inner .image{
display: block;
width: 75px;
height: 75px;
float: left;
border-radius: 75px;
overflow:hidden;
}
.author_text_holder {
padding: 0 0 0 100px;
min-height: 100px;
position:relative;
}
.author_text_holder .author_name {
display: block;
margin: 0px 0 4px 0;
}
.author_text_holder .author_email{
display:block;
margin: 0px 0 6px 0;
}
.single_tags {
margin:26px 0px 0px 0px;
}
.single_tags a,
.widget .tagcloud a {
letter-spacing:1px;
}
.single_tags h5{
display:inline-block;
}
.widget .tagcloud a {
display: inline-block;
font-size: 13px !important;
}
.widget .tagcloud a:after{
content:",";
}
.widget .tagcloud a:last-child:after{
content:"";
}
.blog_social_and_comments{
display: inline-block;
width: 100%;
margin: 0 0 20px;
}
.comment_number_holder{
display: inline-block;
float: left;
}
.blog_single_social{
display: inline-block;
float: right;
}
.blog_single_social .blog_like{
float: right;
margin: 0 0 0 15px;
}
.comment_holder{
padding: 28px 0 38px;
margin: 0 0 0;
}
.comment_number_holder .comment_number{
color: #000;
}
.comment_holder .comment_number{
margin:0 0 20px;
}
.comment_number .comment_number_inner i{
position: relative;
top: -1px;
padding:0 10px 0 0;
}
.comment_holder ul.comment-list{
list-style: none;
position: relative;
z-index: 150;
padding:0;
}
.comment_holder .comment-list{
margin: 0;
}
.comment_holder .comment-list li{
display: inline-block;
position: relative;
width: 100%;
}
.comment_holder .comment-list li ul.children li:last-child{
padding:0 0 0px;
}
.comment_holder .comment-list > li{
margin: 0 0 18px;
}
.comment_holder .comment-list > li:last-child{
margin: 0;
}
.comment_holder .comment{
padding: 23px;
background-color:#fff;
}
.comment_holder .comment .image {
display: block;
width: 75px;
height: 75px;
float: left;
border-radius: 75px;
overflow: hidden;
}
.comment_holder .comment .text {
padding: 0 0 0 100px;
min-height: 80px;
position:relative;
}
.comment_holder .comment .text .name {
display: block;
color: #303030;
}
.comment_holder .comment .text .replay,
.comment_holder .comment .text .comment-reply-link {
color: #1abc9c;
font-size:9px;
text-transform:uppercase;
font-weight:700;
padding:0 0 0 5px;
}
.comment_holder .comment .text .text_holder {
display: block;
margin:3px 0 0 0;
}
.comment_holder .comment .logged-in-as {
margin: 10px 0;
}
.comment_holder .comment .form-submit {
margin: 0 0 20px;
}
.comment_holder .comment-list li ul.children {
margin: 18px 0 0 0;
padding: 0 0 0 70px;
}
.comment_holder .comment-list li ul.children li{
margin: 0px;
border-bottom:none;
}
#respond h3 {
margin: 0 0 15px 0;
}
#respond h3.comment-reply-title{
margin:0;
}
#respond small {
display: block;
margin: 0 0 12px;
position: relative;
}
.comment_holder .comment .comment-respond{
margin-top: 20px;
}
#respond textarea,
#respond input[type='text'],
.contact_form input[type='text'],
.contact_form textarea {
width:100%;
margin: 0 0 20px 0;
padding: 15px 12px;
border: 0;
outline: 0;
resize: none;
font-size: 13px;
line-height:17px;
background-color:#fff;
color: #818181;
font-family: 'Raleway';
font-weight:400;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
#respond textarea {
padding: 12px;
}
.comment_holder #respond textarea,
.comment_holder #respond input[type='text']{
background-color: #fff;
}
.comment_holder .comment #respond textarea,
.comment_holder .comment #respond input[type='text']{
background-color: #f6f6f6;
}
.comment_holder #respond textarea {
margin: 0 0 12px;
}
div.comment_form {
display: inline-block;
margin: 0 0 30px;
width: 100%;
}
div.comment_form form p.form-submit,
div.comment_holder .comment p.form-submit {
margin: 0;
text-align: right;
}
div.comment_form form p.form-submit .success p{
margin: 10px 0 0;
}
div.comment_form form p.logged-in-as{
margin: 0 0 17px;
}
#cancel-comment-reply-link {
margin: 0px;
display: inline-block;
width: 100%;
}
body.page-template-blog-masonry-full-width-php .content .full_width {
padding: 0 20px 25px 45px;
}
body.page-template-blog-masonry-full-width-php.vertical_menu_enabled .content .full_width{
padding-left:305px;
}
.blog_holder.masonry,
.blog_holder.masonry_full_width {
margin-bottom: 20px;
transition: none !important;
overflow: visible !important;
opacity: 0;
filter: alpha(opacity=0);
}
#infscr-loading{
position: absolute;
bottom:-15px;
left: 50%;
}
.blog_infinite_scroll_button{
display: none;
}
.blog_holder.masonry article,
.blog_holder.masonry_full_width article{
margin: 0 0 30px;
padding: 0;
text-align: left;
vertical-align: top;
z-index: 100;
border: 0;
}
.blog_holder.masonry article,
.blog_holder.masonry .blog_holder_grid_sizer{
width: 31.2%;
}
.blog_holder.masonry .blog_holder_grid_gutter{
width: 3.2%;
}
.blog_holder.masonry_full_width .blog_holder_grid_sizer,
.blog_holder.masonry_full_width article{
width: 18.7%;
}
.blog_holder.masonry_full_width .blog_holder_grid_gutter{
width: 1.6%;
}
.two_columns_75_25 .blog_holder.masonry article,
.two_columns_75_25 .blog_holder.masonry .blog_holder_grid_sizer,
.two_columns_66_33 .blog_holder.masonry article,
.two_columns_66_33 .blog_holder.masonry .blog_holder_grid_sizer,
.two_columns_33_66 .blog_holder.masonry article,
.two_columns_33_66 .blog_holder.masonry .blog_holder_grid_sizer,
.two_columns_25_75 .blog_holder.masonry article,
.two_columns_25_75 .blog_holder.masonry .blog_holder_grid_sizer{
width:48%;
}
.two_columns_75_25 .blog_holder.masonry .blog_holder_grid_gutter,
.two_columns_66_33 .blog_holder.masonry .blog_holder_grid_gutter,
.two_columns_33_66 .blog_holder.masonry .blog_holder_grid_gutter,
.two_columns_25_75 .blog_holder.masonry .blog_holder_grid_gutter{
width: 4%;
}
.blog_holder.masonry article:hover{
z-index: 200;
}
.blog_holder.masonry article .post_image{
margin: 0;
width: auto;
}
.blog_holder.masonry article .post_info,
.blog_holder.masonry_full_width article .post_info{
margin:15px 0 0 0;
color:#303030;
}
.blog_holder.masonry article.format-link .post_info,
.blog_holder.masonry_full_width article.format-link .post_info,
.blog_holder.masonry_full_width article.format-quote .post_info,
.blog_holder.masonry article.format-quote .post_info{
margin: 0 0 20px;
}
.blog_holder.masonry article .post_text .post_text_innet,
.blog_holder.masonry_full_width article .post_text .post_text_innet{
padding: 20px 15px 20px 15px;
}
.blog_holder.masonry article.format-link .post_text,
.blog_holder.masonry_full_width article.format-link .post_text,
.blog_holder.masonry article.format-quote .post_text,
.blog_holder.masonry_full_width article.format-quote .post_text{
border:none;
}
.blog_holder article.format-quote h3{
margin:0 0 10px;
line-height:35px;
}
.blog_holder.masonry article h4,
.blog_holder.masonry_full_width article h4{
margin:0 0 4px;
}
.blog_holder.masonry article h3 a{
font-weight: 300;
}
.blog_holder.masonry article.format-link .post_text,
.blog_holder.masonry_full_width article.format-link .post_text,
.blog_holder.masonry_full_width article.format-quote .post_text,
.blog_holder.masonry article.format-quote .post_text{
padding: 0;
}
.blog_holder.masonry article .mejs-controls div.mejs-horizontal-volume-slider,
.blog_holder.masonry_full_width article .mejs-controls div.mejs-horizontal-volume-slider{
margin: 0 10px 0 0;
}
.blog_holder.blog_masonry_date_in_image .time{
position: absolute;
top: 0;
left: 0;
text-align: center;
margin: 5px;
padding: 5px 13px;
background-color: #fff;
}
.blog_holder.blog_masonry_date_in_image .time span{
display: block;
}
.blog_holder.blog_masonry_date_in_image .time .time_day{
color: #303030;
font-size: 19px;
font-weight: 600;
}
.blog_holder.blog_masonry_date_in_image article .post_text .post_text_inner{
text-align: center;
padding: 35px 5px;
}
.blog_holder.blog_masonry_date_in_image article.format-quote .post_text .post_text_inner,
.blog_holder.blog_masonry_date_in_image article.format-link .post_text .post_text_inner{
padding: 35px 15px;
}
.blog_holder.blog_masonry_date_in_image article .post_text h5{
margin-bottom: 30px;
}
.blog_holder.blog_masonry_date_in_image .post_text_inner .social_share_list_holder > span{
display: none;
}
.blog_holder.blog_masonry_date_in_image article .post_text_inner .post_info{
margin-top: 35px;
margin-bottom: 0;
}
.blog_holder.blog_masonry_date_in_image .social_share_list_holder ul li i{
color: #8d8d8d;
-webkit-transition: color 0s ease-in-out;
-moz-transition: color 0s ease-in-out;
-ms-transition: color 0s ease-in-out;
-o-transition: color 0s ease-in-out;
transition: color 0s ease-in-out;
}
.blog_holder.blog_masonry_date_in_image article:not(.format-quote):not(.format-link) .social_share_list_holder ul li i:hover{
color: #1abc9c;
}
.blog_holder.blog_masonry_date_in_image article.format-quote .post_text:hover .social_share_list_holder ul li i,
.blog_holder.blog_masonry_date_in_image article.format-link .post_text:hover .social_share_list_holder ul li i{
color: #fff !important;
}
.isotope-item {
z-index: 2;
}
.isotope-hidden.isotope-item {
pointer-events: none;
z-index: 1;
}
/**** Isotope CSS3 transitions ****/
/*.isotope,
.isotope .isotope-item {
-webkit-transition-duration: 0.8s;
-moz-transition-duration: 0.8s;
-ms-transition-duration: 0.8s;
-o-transition-duration: 0.8s;
transition-duration: 0.8s;
}*/
.isotope {
-webkit-transition-property: height;
-moz-transition-property: height;
-ms-transition-property: height;
-o-transition-property: height;
transition-property: height;
}
.isotope .isotope-item {
-webkit-transition-property: -webkit-transform, opacity;
-moz-transition-property: -moz-transform, opacity;
-ms-transition-property: -ms-transform, opacity;
-o-transition-property: -o-transform, opacity;
transition-property: transform, opacity;
}
.isotope.no-transition,
.isotope.no-transition .isotope-item,
.isotope .isotope-item.no-transition {
-webkit-transition-duration: 0s;
-moz-transition-duration: 0s;
-ms-transition-duration: 0s;
-o-transition-duration: 0s;
transition-duration: 0s;
}
/*************************** BLOG END **************************/
/* ==========================================================================
Pagination styles
========================================================================== */
.pagination {
display: inline-block;
width: 100%;
text-align: center;
margin: 0px 0px 50px;
position:relative;
}
.pagination ul {
display: inline-block;
list-style-type: none;
margin: 0px;
padding: 0px;
}
.pagination ul li {
float: left;
}
.pagination ul li span,
.pagination ul li a{
position: relative;
display: inline-block;
width: 38px;
height: 38px;
line-height: 38px;
margin: 0 11px 0 0;
text-align:center;
color: #b4b4b4;
font-size: 18px;
text-decoration: none;
text-transform: uppercase;
cursor: pointer;
white-space: nowrap;
border: 2px solid #e5e5e5;
outline: none;
-o-border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
-ms-border-radius: 4px;
border-radius: 4px;
text-shadow: none;
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-ms-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
}
.pagination ul li span,
.pagination ul li a:hover{
color: #303030;
background-color: #e3e3e3;
border-color: #e3e3e3;
}
/* ==========================================================================
End of Pagination styles
========================================================================== */
.google_map_holder,
.google_map_shortcode_holder
{
position: relative;
}
.google_map_ovrlay {
position: absolute;
z-index: 1000;
width: 100%;
height: 100%;
display: none;
}
.google_map_shortcode_overlay{
position: absolute;
z-index: 1000;
width: 100%;
height: 100%;
display: none;
top:0;
left:0;
}
.google_map {
display: block;
width: 100%;
height: 450px;
margin:0 0 25px;
}
.qode_google_map {
display: block;
width: 100%;
height: 450px;
}
.google_map iframe,
.google_map object,
.google_map embed,
.qode_google_map iframe,
.qode_google_map object,
.qode_google_map embed {
width: 100%;
display: block;
}
.google_map img,
.qode_google_map img
{
max-width: none;
}
.contact_form h5{
margin:0 0 18px;
}
.contact_info .q_social_icon_holder .fa-stack {
margin:0.2307692307692308em 0.4615384615384616em 0.2307692307692308em 0;
}
.contact-error{
display: block;
margin: 0;
position: relative;
top: -20px;
}
.contact_section{
text-align:center;
padding:0 0 55px;
}
.contact_section.contact_section_position_left{
text-align: left;
}
.contact_section.contact_section_position_right{
text-align: right;
}
.contact_section .separator,
.contact_section .separator.small.right,
.contact_section .separator.small.left
{
margin-top:6px;
margin-bottom:35px;
}
span.submit_button_contact {
display: block;
text-align: right;
}
.contact_form {
margin:0 0 50px;
}
.contact_detail.map_grid .google_map{
margin:0 0 35px;
}
.header-widget.widget_nav_menu {
padding:0 15px 0 0;
position:relative;
font-size:12px;
}
.header-widget.widget_nav_menu ul ul {
display:none;
height: auto;
border-top: none;
background-color: #262626;
z-index: 1010;
position: absolute;
top: 33px;
left: -1px;
width: 180px;
padding:0px;
}
.header-widget.widget_nav_menu ul li:hover ul{
display:block;
}
.header-widget.widget_nav_menu ul li{
list-style:none;
}
.header-widget.widget_nav_menu ul.menu > li {
display: inline-block;
float:left;
position:relative;
}
.header-widget.widget_nav_menu ul.menu li a{
display: inline-block;
padding:0 0px 0 15px;
color:#777;
}
.header-widget.widget_nav_menu ul.menu > li.menu-item-has-children > a:after {
content: "\f107";
font-family: 'FontAwesome', sans-serif;
margin-left: 5px;
}
.header-widget.widget_nav_menu ul.menu li a:hover{
color:#1abc9c;
}
.header-widget.widget_nav_menu ul.menu li ul li a{
color: #9d9d9d;
display: block;
white-space: nowrap;
font-size: 11px;
font-weight: 600;
line-height: 38px;
padding: 0 15px;
border-bottom: 1px solid #303030;
text-transform: uppercase;
}
.header-widget.widget_nav_menu ul.menu li ul li:last-child a{
border-bottom:0;
}
.header-widget ul.menu li:last-child {
margin-right: 0;
}
.header-left-from-logo-widget,
.header-right-from-logo-widget{
display: block;
height: 100%;
position: absolute;
top: 0px;
left: 0px;
padding: 0px 50px;
}
.header-right-from-logo-widget{
left: auto;
right: 0px;
}
header .container_inner .header-left-from-logo-widget,
header .container_inner .header-right-from-logo-widget{
padding: 0px;
}
.header-left-from-logo-widget-inner,
.header-right-from-logo-widget-inner{
display: table;
height: 100%;
}
.header-left-from-logo-widget-inner2,
.header-right-from-logo-widget-inner2{
display: table-cell;
height: 100%;
vertical-align: middle;
}
header.sticky .header-left-from-logo-widget,
header.sticky .header-right-from-logo-widget{
display: none;
}
/* ==========================================================================
Sidebar and side menu styles
========================================================================== */
/**
* Common sidebar, side menu and widgets styles that are placed in this widget areas
*/
.container aside {
position: relative;
z-index: 11;
}
aside .widget a,
.side_menu a,
.side_menu .widget li {
font-weight: 400;
-webkit-transition: color 0.3s ease-in-out;
-moz-transition: color 0.3s ease-in-out;
-ms-transition: color 0.3s ease-in-out;
-o-transition: color 0.3s ease-in-out;
transition: color 0.3s ease-in-out;
}
aside .widget a:hover{
color: #1abc9c;
}
.side_menu .widget a:hover,
.side_menu .widget li:hover,
.side_menu .widget li:hover > a {
color: #fff;
}
aside .widget ul,
.side_menu .widget ul{
list-style: none;
padding:0;
}
aside .widget li,
.side_menu .widget li{
margin: 0 0 10px;
}
aside .widget li:last-child,
.side_menu .widget li:last-child{
margin: 0;
}
.widget.widget_rss li a.rsswidget,
#wp-calendar caption{
color: #000;
}
.footer_top .widget.widget_rss li a.rsswidget,
.footer_top #wp-calendar caption{
color: #fff;
}
#wp-calendar th,
#wp-calendar td{
padding: 3px 4px;
}
#wp-calendar td#today {
color: #fff;
background-color: #1abc9c;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
}
#wp-calendar{
width: 100%;
text-align: center;
}
.widget.widget_rss li span.rss-date,
#wp-calendar caption{
margin: 0 0 15px;
}
.widget.widget_rss li{
margin: 0 0 25px;
}
/* Sidebar styles
========================================================================== */
/**
* Sidebar specific styles
*/
aside .widget.widget_search{
border-bottom: 0px;
padding: 0;
}
aside .widget h5 {
margin-bottom: 14px;
}
aside .widget.posts_holder li {
padding: 7px 0px 7px 0px;
margin: 0;
}
aside .widget.posts_holder li.page_item_has_children > ul.children li:last-child,
aside .widget.posts_holder li.menu-item-has-children > ul.sub-menu li:last-child{
border-bottom: 0;
}
aside .widget.posts_holder li:hover{
color: #1abc9c;
}
aside .widget.posts_holder li.page_item_has_children > ul.children,
aside .widget.posts_holder li.menu-item-has-children > ul.sub-menu {
padding-left: 10px;
}
aside .widget.posts_holder li.page_item_has_children > a,
aside .widget.posts_holder li.menu-item-has-children > a {
display: block;
}
aside .widget a {
color: inherit;
}
aside .widget{
margin: 0 0 42px;
}
aside .widget_nav_menu .sub-menu,
aside .widget_pages .children {
margin-left: 20px;
margin-top: 6px;
}
/* Side menu styles
========================================================================== */
/**
* Side menu specific styles
*/
.side_menu{
background-color: #1b1b1b;
height: 100%;
min-height: 100%;
overflow: hidden;
padding: 30px;
position: fixed;
top: 0;
right: -270px;
width: 270px;
z-index: 90;
visibility: hidden;
-webkit-backface-visibility: hidden;
box-sizing:border-box;
}
/* Side Menu Slides Over Content */
.right_side_menu_opened .wrapper,
.right_side_menu_opened footer.uncover{
left:-270px;
}
.side_menu_slide_from_right .wrapper{
background-color: #fff;
position: relative;
z-index: 1000;
-moz-transition: left 0.2s cubic-bezier(.645,.045,.355,1.000);
-o-transition: left 0.2s cubic-bezier(.645,.045,.355,1.000);
-webkit-transition: left 0.2s cubic-bezier(.645,.045,.355,1.000);
transition: left 0.2s cubic-bezier(.645,.045,.355,1.000);
-ms-transform:translateX(0,0);
-moz-transform:translateX(0,0);
-o-transform:translateX(0,0);
transform:translateX(0,0);
-webkit-transform:translateX(0,0);
}
.side_menu_slide_from_right.right_side_menu_opened .wrapper{
transform:translateX(-270px,0);
-ms-transform:translateX(-270px,0);
-moz-transform:translateX(-270px,0);
-webkit-transform:translateX(-270px,0);
-o-transform:translateX(-270px,0);
-moz-transition:left 0.2s cubic-bezier(.645,.045,.355,1.000);
-o-transition:left 0.2s cubic-bezier(.645,.045,.355,1.000);
-webkit-transition:left 0.2s cubic-bezier(.645,.045,.355,1.000);
transition:left 0.2s cubic-bezier(.645,.045,.355,1.000);
}
.side_menu_slide_from_right .carousel-inner {
-moz-transition: left 0.2s cubic-bezier(.645,.045,.355,1.000);
-o-transition: left 0.2s cubic-bezier(.645,.045,.355,1.000);
-webkit-transition: left 0.2s cubic-bezier(.645,.045,.355,1.000);
transition: left 0.2s cubic-bezier(.645,.045,.355,1.000);
}
.side_menu_slide_from_right .wrapper .cover{
z-index: 0;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: hidden;
opacity: 0;
filter: alpha(opacity=0);
background:#000;
-moz-transition: opacity 0.2s ease-in-out,background 0.2s ease-in-out,z-index 0.2s ease-in-out;
-o-transition: opacity 0.2s ease-in-out,background 0.2s ease-in-out,z-index 0.2s ease-in-out;
-webkit-transition: opacity 0.2s ease-in-out,background 0.2s ease-in-out,z-index 0.2s ease-in-out;
transition: opacity 0.2s ease-in-out,background 0.2s ease-in-out,z-index 0.2s ease-in-out;
}
.side_menu_slide_from_right.right_side_menu_opened .wrapper .cover{
z-index: 1002;
opacity: 0.6;
filter: alpha(opacity=60);
-moz-transition: opacity 0.2s ease-in-out,background 0.2s ease-in-out,z-index 0.2s ease-in-out;
-o-transition: opacity 0.2s ease-in-out,background 0.2s ease-in-out,z-index 0.2s ease-in-out;
-webkit-transition: opacity 0.2s ease-in-out,background 0.2s ease-in-out,z-index 0.2s ease-in-out;
transition: opacity 0.2s ease-in-out,background 0.2s ease-in-out,z-index 0.2s ease-in-out;
}
.side_menu_slide_from_right .side_menu {
padding: 5% 30px 30px 30px;
top: 0;
right: -45%;
width: 45%;
z-index: 9999;
text-align: center;
visibility: hidden;
-moz-transition: 0.2s ease-in-out;
-o-transition: 0.2s ease-in-out;
-webkit-transition: 0.2s ease-in-out;
transition: 0.2s ease-in-out;
-webkit-box-sizing:border-box;
box-sizing: border-box;
}
.right_side_menu_opened.side_menu_slide_from_right .side_menu {
right: 0px;
visibility: visible;
-moz-transition: right 0.2s ease-in-out;
-o-transition: right 0.2s ease-in-out;
-webkit-transition: right 0.2s ease-in-out;
transition: right 0.2s ease-in-out;
}
.side_menu_slide_from_right header.sticky,
.side_menu_slide_from_right header.fixed_top_header .top_header,
.side_menu_slide_from_right header.fixed,
.side_menu_slide_from_right header.fixed_hiding,
.side_menu_slide_from_right header.fixed_top_header .top_header{
-moz-transition: left 0.2s cubic-bezier(.645,.045,.355,1.000), top 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
-o-transition: left 0.2s cubic-bezier(.645,.045,.355,1.000), top 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
-webkit-transition: left 0.2s cubic-bezier(.645,.045,.355,1.000), top 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
transition: left 0.2s cubic-bezier(.645,.045,.355,1.000), top 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
}
.side_menu_slide_from_right footer.uncover {
-moz-transition: left 0.2s cubic-bezier(.645,.045,.355,1.000);
-o-transition: left 0.2s cubic-bezier(.645,.045,.355,1.000);
-webkit-transition: left 0.2s cubic-bezier(.645,.045,.355,1.000);
transition: left 0.2s cubic-bezier(.645,.045,.355,1.000);
}
/* Side Menu Slides With Content */
body.side_menu_slide_with_content{
overflow-x: hidden;
position: relative;
left: 0;
-webkit-overflow-scrolling:auto !important;
}
body.side_menu_slide_with_content.side_menu_open .wrapper,
body.side_menu_slide_with_content.side_menu_open footer.uncover{
left: -470px;
}
body.side_menu_slide_with_content .wrapper{
-webkit-transition: left 0.2s ease, right 0.2s ease;
-moz-transition: left 0.2s ease, right 0.2s ease;
transition: left 0.2s ease, right 0.2s ease;
}
body.side_menu_slide_with_content .side_menu,
body.side_menu_slide_with_content,
body.side_menu_slide_with_content header.fixed,
body.side_menu_slide_with_content header.fixed_top_header .top_header,
body.side_menu_slide_with_content header.fixed_hiding,
body.side_menu_slide_with_content footer.uncover{
-webkit-transition: left 0.2s ease, right 0.2s ease;
-moz-transition: left 0.2s ease, right 0.2s ease;
transition: left 0.2s ease, right 0.2s ease;
}
body.side_menu_slide_with_content header.sticky{
-webkit-transition: left 0.2s ease, right 0.2s ease, top 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
-moz-transition: left 0.2s ease, right 0.2s ease, top 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
transition: left 0.2s ease, right 0.2s ease, top 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
}
body.side_menu_slide_with_content .side_menu{
position: fixed;
visibility: visible;
-webkit-box-sizing:border-box;
box-sizing: border-box;
width: 470px;
right: -470px;
height: 100%;
top: 0;
z-index: 9999;
}
body.side_menu_slide_with_content.side_menu_open .side_menu {
right: 0;
}
body.side_menu_slide_with_content.side_menu_open .carousel-inner:not(.relative_position){
left:-470px !important;
-webkit-transition: left 0.2s ease;
-moz-transition: left 0.2s ease;
transition: left 0.2s ease;
}
body.side_menu_slide_with_content .carousel-inner {
left:0 !important;
-webkit-transition: left 0.2s ease;
-moz-transition: left 0.2s ease;
transition: left 0.2s ease;
}
body.side_menu_slide_with_content.side_menu_open header.fixed,
body.side_menu_slide_with_content.side_menu_open header.fixed_top_header .top_header,
body.side_menu_slide_with_content.side_menu_open header.fixed_hiding,
body.side_menu_slide_with_content.side_menu_open header.sticky{
left: -470px;
-webkit-transition: left 0.2s ease;
-moz-transition: left 0.2s ease;
transition: left 0.2s ease;
}
/* width 270px start */
body.side_menu_slide_with_content.width_270.side_menu_open .wrapper,
body.side_menu_slide_with_content.width_270.side_menu_open footer.uncover{
left: -270px;
}
body.side_menu_slide_with_content.width_270 .side_menu{
width: 270px;
right: -270px;
}
body.side_menu_slide_with_content.width_270.side_menu_open .side_menu {
right: 0;
}
body.side_menu_slide_with_content.width_270.side_menu_open .carousel-inner:not(.relative_position){
left:-270px !important;
}
body.side_menu_slide_with_content.width_270.side_menu_open header.fixed,
body.side_menu_slide_with_content.width_270.side_menu_open header.fixed_hiding,
body.side_menu_slide_with_content.width_270.side_menu_open header.sticky,
body.side_menu_slide_with_content.width_270.side_menu_open header.fixed_top_header .top_header{
left: -270px;
}
/* width 270px end */
/* width 370px start */
body.side_menu_slide_with_content.width_370.side_menu_open .wrapper,
body.side_menu_slide_with_content.width_370.side_menu_open footer.uncover{
left: -370px;
}
body.side_menu_slide_with_content.width_370 .side_menu{
width: 370px;
right: -370px;
}
body.side_menu_slide_with_content.width_370.side_menu_open .side_menu {
right: 0;
}
body.side_menu_slide_with_content.width_370.side_menu_open .carousel-inner:not(.relative_position){
left:-370px !important;
}
body.side_menu_slide_with_content.width_370.side_menu_open header.fixed,
body.side_menu_slide_with_content.width_370.side_menu_open header.fixed_hiding,
body.side_menu_slide_with_content.width_370.side_menu_open header.sticky,
body.side_menu_slide_with_content.width_370.side_menu_open header.fixed_top_header .top_header{
left: -370px;
}
/* width 370px end */
/* Side Menu Slides With Content - End */
.side_menu.side_area_alignment_left{
text-align: left;
}
.side_menu.side_area_alignment_center{
text-align: center;
}
.side_menu.side_area_alignment_right{
text-align: right;
}
.side_menu h5,
.side_menu h6{
margin: 0 0 12px 0;
color: #fff;
}
.side_menu .widget li {
position:relative;
}
.side_menu .widget ul li.page_item_has_children,
.side_menu .widget ul li.menu-item-has-children{
padding-right: 0;
border-bottom:none;
}
.side_menu .widget ul ul{
padding: 6px 0 0 20px;
}
.side_menu .widget{
margin: 0 0 43px;
}
.side_menu a,
.side_menu li,
.side_menu span,
.side_menu p,
.side_menu .widget.widget_rss li a.rsswidget,
.side_menu #wp-calendar caption,
.side_menu #wp-calendar th,
.side_menu #wp-calendar td{
color: #818181;
}
.side_menu .side_menu_title{
display: block;
margin: 0 0 12px;
}
.side_menu .widget.widget_nav_menu li:last-child,
.side_menu .widget.widget_nav_menu li a{
margin: 0;
}
.side_menu a.close_side_menu {
display: inline-block;
position: absolute;
top: 29px;
right: 25px;
width: 13px;
height: 13px;
line-height: 13px;
background-image: url('img/close_side_menu.png');
background-repeat: no-repeat;
z-index: 1000;
-webkit-transition: all .5s ease;
-moz-transition: all .5s ease;
-ms-transition: all .5s ease;
-o-transition: all .5s ease;
transition: all .5s ease;
}
.side_menu a.close_side_menu:hover{
transform: rotate(180deg);
-ms-transform: rotate(180deg);
-webkit-transform: rotate(180deg);
-o-transform: rotate(180deg);
-moz-transform: rotate(180deg);
}
@media only screen and (-webkit-min-device-pixel-ratio:2.0), only screen and (min--moz-device-pixel-ratio:2.0), only screen and (-o-min-device-pixel-ratio:200/100), only screen and (min-device-pixel-ratio:2.0), only screen and (min-resolution:210dpi) {
.side_menu a.close_side_menu {
background-image: url("img/close_side_menu@2x.png");
-o-background-size: 13px 13px;
-webkit-background-size: 13px 13px;
-moz-background-size: 13px 13px;
background-size: 13px 13px;
}
}
@media only screen and (-webkit-min-device-pixel-ratio:1.5), only screen and (min--moz-device-pixel-ratio:1.5), only screen and (-o-min-device-pixel-ratio:150/100), only screen and (min-device-pixel-ratio:1.5), only screen and (min-resolution:160dpi) {
.side_menu a.close_side_menu {
background-image: url("img/close_side_menu@2x.png");
-o-background-size: 13px 13px;
-webkit-background-size: 13px 13px;
-moz-background-size: 13px 13px;
background-size: 13px 13px;
}
}
.side_menu.dark a.close_side_menu {
background-image: url('img/close_side_menu_dark.png');
}
@media only screen and (-webkit-min-device-pixel-ratio:2.0), only screen and (min--moz-device-pixel-ratio:2.0), only screen and (-o-min-device-pixel-ratio:200/100), only screen and (min-device-pixel-ratio:2.0), only screen and (min-resolution:210dpi) {
.side_menu.dark a.close_side_menu {
background-image: url("img/close_side_menu_dark@2x.png");
-o-background-size: 13px 13px;
-webkit-background-size: 13px 13px;
-moz-background-size: 13px 13px;
background-size: 13px 13px;
}
}
@media only screen and (-webkit-min-device-pixel-ratio:1.5), only screen and (min--moz-device-pixel-ratio:1.5), only screen and (-o-min-device-pixel-ratio:150/100), only screen and (min-device-pixel-ratio:1.5), only screen and (min-resolution:160dpi) {
.side_menu.dark a.close_side_menu {
background-image: url("img/close_side_menu_dark@2x.png");
-o-background-size: 13px 13px;
-webkit-background-size: 13px 13px;
-moz-background-size: 13px 13px;
background-size: 13px 13px;
}
}
/* ==========================================================================
End of sidebar and side menu styles
========================================================================== */
.footer_top .widget.widget_nav_menu li{
margin: 0 0 0px;
line-height: 22px;
}
.widget.widget_archive select,
.widget.widget_categories select,
.widget.widget_text select {
width: 100%;
overflow: hidden;
border: 1px solid transparent;
font-size: 13px;
background-color: #fff;
outline: 0px;
color: #818181;
font-family: inherit;
padding: 2px 4%;
height: 37px;
}
.widget #searchform {
display: inline-block;
width: 100%;
overflow: hidden;
background-color: #fff;
}
.footer_top .widget #searchform{
background-color: transparent;
border: 1px solid #6a6a6a;
}
.header_top #searchform {
padding: 0 10px;
height: 33px;
}
.widget.widget_search form.form_focus {
border-color: #1abc9c;
}
.widget.widget_search form input[type="submit"],
.header_top #searchform input[type="submit"]{
width: 37px;
height: 37px;
line-height: 37px;
display: inline-block;
margin: 0;
padding: 0 4%;
outline: none;
border: none;
text-decoration: none;
background-color: transparent;
color: #b9b9b9;
font-family: 'FontAwesome', sans-serif;
cursor: pointer;
white-space: nowrap;
float: right;
-webkit-transition: all 0.2s ease-in-out;
-moz-transition: all 0.2s ease-in-out;
-o-transition: all 0.2s ease-in-out;
-ms-transition: all 0.2s ease-in-out;
}
.footer_top .widget #searchform input[type="submit"]{
color: #6a6a6a;
}
.header_top #searchform input[type="submit"]{
width: 22px;
height: 25px;
line-height: 25px;
margin: 4px 0 0;
background: none;
}
.widget.widget_search form .screen-reader-text,
.header_top #searchform .screen-reader-text{
display: none;
}
.widget.widget_search form input[type="text"],
.header_top #searchform input[type="text"]{
display: inline-block;
text-decoration: none;
border: 0;
outline: 0px;
color: #adadad;
background-color: transparent;
font-family: inherit;
margin: 0;
padding: 2px 4%;
width: 74%;
height: 33px;
float: left;
}
.footer_top .widget #searchform input[type="text"]{
color: #6a6a6a;
}
.header_top #searchform input[type="text"]{
height: 29px;
font-size: 12px;
}
.side_menu .widget #searchform input[type="text"],
.footer_top .widget.widget_search form input[type="text"]{
width: 70% !important;
}
.widget .tagcloud {
display:inline-block;
width:100%;
}
.widget .tagcloud a {
margin: 0 0px 3px 0;
}
.side_menu .widget .tagcloud a {
color: #fff;
}
footer{
display: block;
width: 100%;
margin: 0px auto;
z-index: 100;
position: relative;
}
footer.uncover{
position: fixed;
bottom: 0px;
left: 0px;
z-index: 99;
-webkit-transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
-moz-transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
-o-transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
-ms-transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
-webkit-backface-visibility: hidden;
}
.boxed footer{
width: 100% !important;
box-sizing:border-box;
-moz-box-sizing:border-box; /* Firefox */
}
.right_side_menu_opened footer.uncover{
left: -270px;
}
footer .container_inner{
position: relative;
}
.footer_top_holder{
display: block;
background-color: #262626;
position: relative;
}
.footer_top{
padding: 72px 0px 52px;
}
.footer_top_border.in_grid,
.footer_bottom_border.in_grid {
width: 1100px;
margin: 0 auto;
}
.footer_top.footer_top_full{
padding: 48px 24px;
}
.footer_top h5{
color: #fff;
margin: 0 0 22px;
}
.footer_top ul{
list-style: none;
}
.footer_top a,
.footer_top p,
.footer_top span,
.footer_top li,
.footer_top .textwidget
{
color: #818181;
word-wrap: break-word;
}
.footer_top a{
-webkit-transition: color 0.2s ease-in-out;
-moz-transition: color 0.2s ease-in-out;
-o-transition: color 0.2s ease-in-out;
-ms-transition: color 0.2s ease-in-out;
}
.footer_top a:hover{
color:#fff !important;
}
.footer_top .four_columns .column2 .column_inner > div,
.footer_top .three_columns .column2 .column_inner > div,
.footer_top .two_columns_50_50 .column2 .column_inner > div{
margin: 0 0 0 15px;
}
.footer_top .four_columns .column3 .column_inner > div,
.footer_top .three_columns .column3 .column_inner > div{
margin: 0 0 0 10px;
}
.footer_top .four_columns .column4 .column_inner > div{
margin: 0 0 0 5px;
}
.footer_top .widget_nav_menu li.menu-item a {
margin-bottom: 0;
}
.footer_top .widget_recent_entries > ul > li,
.footer_top .widget_recent_comments > ul > li,
.footer_top .widget_meta > ul > li,
.footer_top .widget_nav_menu ul li,
.footer_top .widget_pages ul li {
padding: 0px 0px 17px;
position: relative;
}
.footer_top .widget_nav_menu ul li ul,
.footer_top .widget_pages ul li ul{
padding:0 0 0 10px;
}
.footer_top .widget_recent_entries > ul > li > a,
.footer_top .widget_pages > ul > li > a,
.footer_top .widget_meta > ul > li > a,
.footer_top .widget_nav_menu ul li a,
.footer_top .widget_recent_comments > ul > li > a,
.footer_top .widget_recent_entries > ul > li > span {
display: block;
}
.footer_top .widget_recent_entries > ul > li > span {
color:#9d9d9d;
}
.footer_bottom_holder {
display: block;
background-color: #1b1b1b;
}
.footer_top_holder svg.angled-section polygon{
fill:#1b1b1b;
}
.footer_bottom {
display: table-cell;
text-align: center;
font-size: 12px;
line-height: 22px;
height: 53px;
width: 1%;
vertical-align: middle;
}
.footer_bottom_columns.three_columns .column1 .footer_bottom,
.footer_bottom_columns.two_columns_50_50 .column1 .footer_bottom,
.footer_bottom_columns.three_columns .column1 .footer_bottom ul,
.footer_bottom_columns.two_columns_50_50 .column1 .footer_bottom ul
{
text-align: left;
}
.footer_bottom_columns.three_columns .column3 .footer_bottom,
.footer_bottom_columns.two_columns_50_50 .column2 .footer_bottom,
.footer_bottom_columns.three_columns .column3 .footer_bottom ul,
.footer_bottom_columns.two_columns_50_50 .column2 .footer_bottom ul
{
text-align: right;
}
.footer_bottom p,
.footer_bottom span {
margin: 0px;
}
.footer_bottom .footer_text_title {
display: none;
}
.footer_bottom ul {
list-style: none;
text-align: center;
}
.footer_bottom ul li {
display: inline-block;
margin-right: 46px;
}
.footer_bottom ul li:last-child {
margin-right: 0;
}
.footer_bottom ul li a {
color: #fff;
text-transform: uppercase;
font-weight: 500;
letter-spacing: 1px;
font-size: 13px;
-webkit-transition: color 0.3s ease-in-out;
-moz-transition: color 0.3s ease-in-out;
-ms-transition: color 0.3s ease-in-out;
-o-transition: color 0.3s ease-in-out;
transition: color 0.3s ease-in-out;
}
.footer_bottom ul li a:hover {
color: #818181;
}
.footer_top .q_social_icon_holder i.simple_social {
margin-right:16px;
}
.footer_top .q_social_icon_holder i.simple_social,
.side_menu .q_social_icon_holder i.simple_social{
color: #818181;
}
.footer_top .q_social_icon_holder:hover i.simple_social,
.side_menu .q_social_icon_holder:hover i.simple_social
{
color: #fff !important;
}
.footer_top .q_social_icon_holder.normal_social{
margin:0 0 0 0;
}
.footer_top .q_social_icon_holder:last-child i.simple_social{
margin-right:0;
}
.footer_top .q_social_icon_holder i.simple_social{
-webkit-transition:all 0.3s ease 0s;
-moz-transition:all 0.3s ease 0s;
-o-transition:all 0.3s ease 0s;
transition:all 0.3s ease 0s;
}
#back_to_top{
color: #cdcdcd;
height: auto;
position: fixed;
bottom: 65px;
margin: 0px;
z-index: 10000;
-webkit-transition:all 0.3s ease 0s;
-moz-transition:all 0.3s ease 0s;
-o-transition:all 0.3s ease 0s;
transition:all 0.3s ease 0s;
right: 25px;
opacity: 0;
filter: alpha(opacity=0);
visibility: hidden;
-webkit-backface-visibility: hidden;
}
#back_to_top.off{
opacity: 0;
filter: alpha(opacity=0);
right: 25px;
}
#back_to_top.on{
opacity: 1;
filter: alpha(opacity=100);
visibility: visible;
right: 25px;
}
#back_to_top .hover{
display: none;
}
#back_to_top span{
width: 52px;
height: 52px;
line-height: 52px;
text-decoration: none;
-o-border-radius: 52px;
-moz-border-radius: 52px;
-webkit-border-radius: 52px;
border-radius: 52px;
-webkit-transition:all 0.2s ease 0s;
-moz-transition:all 0.2s ease 0s;
-o-transition:all 0.2s ease 0s;
border:2px solid #e8e8e8;
background:transparent;
}
#back_to_top span i{
font-size: 22px;
-webkit-transition: color 0.2s ease 0s;
-moz-transition: color 0.2s ease 0s;
-o-transition: color 0.2s ease 0s;
color:#b0b0b0;
line-height: 52px;
}
#back_to_top:hover span{
background-color:#e8e8e8;
}
.right_side_menu_opened #back_to_top{
display: none;
}
/* ==========================================================================
Steps shortcode styles
========================================================================== */
.q_steps_holder {
width: 100%;
text-align: center;
}
.q_steps_holder_inner {
position: relative;
display: inline-block;
}
.q_steps_holder .circle_small,
.q_steps_holder .circle_small_inner {
width: 192px;
height: 192px;
}
.q_steps_holder .circle_small_wrapper {
margin: 0 auto;
border-radius: 530px;
border: 2px solid transparent;
border-top: 2px solid #1abc9c;
width: 193px;
height: 192px;
}
.q_steps_holder .circle_small {
margin: 0 auto;
border: 1px solid #c7c7c7;
color: #666666;
font-family: inherit;
font-size: 26px;
border-radius: 500px;
text-align: center;
}
.q_steps_holder .circle_small:hover span,
.q_steps_holder .circle_small:hover .step_title {
color: #1abc9c !important;
}
.q_steps_holder .circle_small_inner {
display: table-cell;
vertical-align: middle;
}
.q_steps_holder .circle_small_inner span{
font-size: 50px;
font-weight:500;
line-height:50px;
}
.q_steps_holder a.circle_small_inner {
color: #666666;
}
.q_steps_holder a.circle_small_inner:hover {
color: inherit;
}
.q_steps_holder .circle_small span {
display: block;
margin-bottom: 5px;
-webkit-transition:color 0.2s ease 0s;
-moz-transition:color 0.2s ease 0s;
-o-transition:color 0.2s ease 0s;
}
.q_steps_holder .circle_small .step_title {
color: #666666;
letter-spacing: 1px;
font-size: 16px;
-webkit-transition:color 0.2s ease 0s;
-moz-transition:color 0.2s ease 0s;
-o-transition:color 0.2s ease 0s;
}
.q_steps_holder .circle_small_holder p {
margin-top: 5px;
text-align: center;
padding: 0 21px;
}
.q_steps_holder .circle_small_holder {
width: 265px;
display: inline-block;
}
.q_steps_holder .circle_small_holder_inner {
position: relative;
}
.q_steps_holder .circle_small_holder:last-child .circle_small_holder_inner .arrow_holder {
background: none;
}
.q_steps_holder.show .circle_small_holder {
opacity: 1;
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1);
}
.q_steps_holder .circle_small_holder {
-webkit-transform: scale(0.7);
-moz-transform: scale(0.7);
-ms-transform: scale(0.7);
-o-transform: scale(0.7);
transform: scale(0.7);
opacity: 0;
-webkit-transition: all 0.3s ease-out;
-moz-transition: all 0.3s ease-out;
-o-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.q_steps_holder .step1 {
left: 40px;
top: 85px;
-webkit-transition-delay: 0.5s;
-moz-transition-delay: 0.5s;
-ms-transition-delay: 0.5s;
-o-transition-delay: 0.5s;
transition-delay: 0.5s;
}
.q_steps_holder .step1 .circle_small_wrapper {
transform:rotate(-25deg);
-ms-transform:rotate(-25deg); /* IE 9 */
-webkit-transform:rotate(-25deg); /* Safari and Chrome */
}
.q_steps_holder .step1 .circle_small {
transform:rotate(25deg);
-ms-transform:rotate(25deg); /* IE 9 */
-webkit-transform:rotate(25deg); /* Safari and Chrome */
}
.q_steps_holder .step2 {
-webkit-transition-delay: 1s;
-moz-transition-delay: 1s;
-ms-transition-delay: 1s;
-o-transition-delay: 1s;
transition-delay: 1s;
}
.q_steps_holder .step2 .circle_small_wrapper {
transform:rotate(-175deg);
-ms-transform:rotate(-175deg); /* IE 9 */
-webkit-transform:rotate(-175deg); /* Safari and Chrome */
}
.q_steps_holder .step2 .circle_small {
transform:rotate(175deg);
-ms-transform:rotate(175deg); /* IE 9 */
-webkit-transform:rotate(175deg); /* Safari and Chrome */
}
.q_steps_holder .step3 {
-webkit-transition-delay: 1.5s;
-moz-transition-delay: 1.5s;
-ms-transition-delay: 1.5s;
-o-transition-delay: 1.5s;
transition-delay: 1.5s;
}
.q_steps_holder .step3 .circle_small_wrapper {
transform:rotate(25deg);
-ms-transform:rotate(25deg); /* IE 9 */
-webkit-transform:rotate(25deg); /* Safari and Chrome */
}
.q_steps_holder .step3 .circle_small {
transform:rotate(-25deg);
-ms-transform:rotate(-25deg); /* IE 9 */
-webkit-transform:rotate(-25deg); /* Safari and Chrome */
}
.q_steps_holder .step4 .circle_small_wrapper {
transform:rotate(-170deg);
-ms-transform:rotate(-170deg); /* IE 9 */
-webkit-transform:rotate(-170deg); /* Safari and Chrome */
}
.q_steps_holder .step4 .circle_small {
transform:rotate(170deg);
-ms-transform:rotate(170deg); /* IE 9 */
-webkit-transform:rotate(170deg); /* Safari and Chrome */
}
.q_steps_holder .step4{
-webkit-transition-delay: 2s;
-moz-transition-delay: 2s;
-ms-transition-delay: 2s;
-o-transition-delay: 2s;
transition-delay: 2s;
}
/* ==========================================================================
Steps shortcode end styles
========================================================================== */
/* ==========================================================================
Separator with text shortcode start styles
========================================================================== */
.vc_text_separator.full{
padding-bottom: 20px;
border-top: 1px solid #eaeaea;
margin-top: 20px;
border-bottom:0;
}
.vc_text_separator.full.separator_align_center{
text-align: center;
}
.vc_text_separator.full.separator_align_right{
text-align: right;
}
.vc_text_separator.full div{
padding: 0px 35px;
line-height: 36px;
top: -19px;
font-size: 12px;
color: #fff;
font-weight: 700;
background-color: #1abc9c;
border-radius: 2px;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
-o-border-radius: 2px;
border:1px solid transparent;
display: inline-block;
position: relative;
}
/* ==========================================================================
Separator with text shortcode end styles
========================================================================== */
/* ==========================================================================
Separator with icon shortcode start styles
========================================================================== */
.separator_with_icon {
color: #818181;
display: block;
font-size: 18px;
line-height: 21px;
margin: 0 auto;
position: relative;
width: 783px;
max-width: 100%;
text-align: center;
}
.separator_with_icon:before {
border-bottom: 1px solid #818181;
border-color: inherit;
content: "";
display: inline-block;
left: 0;
position: absolute;
top: 10px;
width: 376px;
}
.separator_with_icon:after {
border-bottom: 1px solid #818181;
border-color: inherit;
content: "";
display: inline-block;
position: absolute;
right: 0;
top: 10px;
width: 376px;
}
@media only screen and (max-width: 1000px){
.separator_with_icon:after,
.separator_with_icon:before {
max-width: 45%;
}
}
/* ==========================================================================
Separator with icon shortcode end styles
========================================================================== */
.page_not_found {
text-align:center;
margin:0 0 83px;
}
.page_not_found h2{
margin: 40px 0 20px;
font-size:32px;
}
.page_not_found p{
margin: 15px 0 35px;
}
.custom_font_holder{
display: block;
position: relative;
}
body div.pp_default .pp_loaderIcon{
background-color: #ffffff;
border-radius: 20px;
}
/* ==========================================================================
Pretty Photo style start
========================================================================== */
div.pp_default .pp_top,div.pp_default .pp_top .pp_middle,div.pp_default .pp_top .pp_left,div.pp_default .pp_top .pp_right,div.pp_default .pp_bottom,div.pp_default .pp_bottom .pp_left,div.pp_default .pp_bottom .pp_middle,div.pp_default .pp_bottom .pp_right{height:13px}
div.pp_default .pp_top .pp_left{background:url(img/prettyPhoto/sprite.png) -78px -93px no-repeat}
div.pp_default .pp_top .pp_middle{background:url(img/prettyPhoto/sprite_x.png) top left repeat-x}
div.pp_default .pp_top .pp_right{background:url(img/prettyPhoto/sprite.png) -112px -93px no-repeat}
div.pp_default .pp_content .ppt{color:#f8f8f8}
div.pp_default .pp_content_container .pp_left{background:url(img/prettyPhoto/sprite_y.png) -7px 0 repeat-y;padding-left:13px}
div.pp_default .pp_content_container .pp_right{background:url(img/prettyPhoto/sprite_y.png) top right repeat-y;padding-right:13px}
div.pp_default .pp_next:hover{background:url(img/prettyPhoto/sprite_next.png) center right no-repeat;cursor:pointer}
div.pp_default .pp_previous:hover{background:url(img/prettyPhoto/sprite_prev.png) center left no-repeat;cursor:pointer}
div.pp_default .pp_expand{background:url(img/prettyPhoto/sprite.png) 0 -29px no-repeat;cursor:pointer;width:28px;height:28px}
div.pp_default .pp_expand:hover{background:url(img/prettyPhoto/sprite.png) 0 -56px no-repeat;cursor:pointer}
div.pp_default .pp_contract{background:url(img/prettyPhoto/sprite.png) 0 -84px no-repeat;cursor:pointer;width:28px;height:28px}
div.pp_default .pp_contract:hover{background:url(img/prettyPhoto/sprite.png) 0 -113px no-repeat;cursor:pointer}
div.pp_default .pp_close{width:30px;height:30px;background:url(img/prettyPhoto/sprite.png) 2px 1px no-repeat;cursor:pointer}
div.pp_default .pp_gallery ul li a{background:url(img/prettyPhoto/default_thumb.png) center center #f8f8f8;border:1px solid #aaa}
div.pp_default .pp_social{margin-top:7px}
div.pp_default .pp_gallery a.pp_arrow_previous,div.pp_default .pp_gallery a.pp_arrow_next{position:static;left:auto}
div.pp_default .pp_nav .pp_play,div.pp_default .pp_nav .pp_pause{background:url(img/prettyPhoto/sprite.png) -51px 1px no-repeat;height:30px;width:30px}
div.pp_default .pp_nav .pp_pause{background-position:-51px -29px}
div.pp_default a.pp_arrow_previous,div.pp_default a.pp_arrow_next{background:url(img/prettyPhoto/sprite.png) -31px -3px no-repeat;height:20px;width:20px;margin:4px 0 0}
div.pp_default a.pp_arrow_next{left:52px;background-position:-82px -3px}
div.pp_default .pp_content_container .pp_details{margin-top:5px}
div.pp_default .pp_nav{clear:none;height:30px;width:110px;position:relative}
div.pp_default .pp_nav .currentTextHolder{font-family:inherit;color:#999;font-size:13px;left:65px;line-height:25px;position:absolute;top:2px;margin:0;padding:0 0 0 10px}
div.pp_default .pp_close:hover,div.pp_default .pp_nav .pp_play:hover,div.pp_default .pp_nav .pp_pause:hover,div.pp_default .pp_arrow_next:hover,div.pp_default .pp_arrow_previous:hover{opacity:0.7}
div.pp_default .pp_description{font-size:15px;font-weight:300;line-height:14px;margin:10px 50px 10px 0}
div.pp_default .pp_bottom .pp_left{background:url(img/prettyPhoto/sprite.png) -78px -127px no-repeat}
div.pp_default .pp_bottom .pp_middle{background:url(img/prettyPhoto/sprite_x.png) bottom left repeat-x}
div.pp_default .pp_bottom .pp_right{background:url(img/prettyPhoto/sprite.png) -112px -127px no-repeat}
div.pp_default .pp_loaderIcon{background:url(img/prettyPhoto/loader.gif) center center no-repeat}
div.pp_pic_holder a:focus{outline:none}
div.pp_overlay{background-color:#000;display:none;left:0;position:absolute;top:0;width:100%;z-index:9500}
div.pp_pic_holder{display:none;position:absolute;width:100px;z-index:10000}
.pp_content{height:40px;min-width:40px}
* html .pp_content{width:40px}
.pp_content_container{position:relative;text-align:left;width:100%}
.pp_content_container .pp_left{padding-left:20px}
.pp_content_container .pp_right{padding-right:20px}
.pp_content_container .pp_details{float:left;margin:10px 0 2px}
.pp_description{display:none;margin:0}
.pp_social{float:left;margin:0}
.pp_social .facebook{float:left;margin-left:5px;width:55px;overflow:hidden}
.pp_social .twitter{float:left}
.pp_nav{clear:right;float:left;margin:3px 10px 0 0}
.pp_nav p{float:left;white-space:nowrap;margin:2px 4px}
.pp_nav .pp_play,.pp_nav .pp_pause{float:left;margin-right:4px;text-indent:-10000px}
a.pp_arrow_previous,a.pp_arrow_next{display:block;float:left;height:15px;margin-top:3px;overflow:hidden;text-indent:-10000px;width:14px}
.pp_hoverContainer{position:absolute;top:0;width:100%;z-index:2000}
.pp_gallery{display:none;left:50%;margin-top:-50px;position:absolute;z-index:10000}
.pp_gallery div{float:left;overflow:hidden;position:relative}
.pp_gallery ul{float:left;height:35px;position:relative;white-space:nowrap;margin:0 0 0 5px;padding:0}
.pp_gallery ul a{border:1px rgba(0,0,0,0.5) solid;display:block;float:left;height:33px;overflow:hidden}
.pp_gallery ul a img{border:0}
.pp_gallery li{display:block;float:left;margin:0 5px 0 0;padding:0}
.pp_gallery li.default a{background:url(../images/prettyPhoto/facebook/default_thumbnail.gif) 0 0 no-repeat;display:block;height:33px;width:50px}
.pp_gallery .pp_arrow_previous,.pp_gallery .pp_arrow_next{margin-top:7px!important}
a.pp_next{display:block;float:right;height:100%;text-indent:-10000px;width:49%}
a.pp_previous{display:block;float:left;height:100%;text-indent:-10000px;width:49%}
a.pp_expand,a.pp_contract{cursor:pointer;display:none;height:20px;position:absolute;right:30px;text-indent:-10000px;top:10px;width:20px;z-index:20000}
a.pp_close{position:absolute;right:0;top:0;display:block;line-height:22px;text-indent:-10000px}
.pp_loaderIcon{display:block;height:24px;left:50%;position:absolute;top:50%;width:24px;margin:-12px 0 0 -12px}
#pp_full_res{line-height:1!important}
#pp_full_res .pp_inline{text-align:left}
#pp_full_res .pp_inline p{margin:0 0 15px}
div.ppt{color:#fff;display:none;font-size:17px;z-index:9999;margin:0 0 5px 15px}
div.pp_default .pp_content{background-color:#fff}
div.pp_default #pp_full_res .pp_inline{color:#000}
div.pp_default .pp_gallery ul li a:hover,div.pp_default .pp_gallery ul li.selected a,.pp_gallery ul a:hover,.pp_gallery li.selected a{border-color:#fff}
div.pp_default .pp_details{position:relative}
.pp_top,.pp_bottom{height:20px;position:relative}
* html .pp_top,* html .pp_bottom{padding:0 20px}
.pp_top .pp_left,.pp_bottom .pp_left{height:20px;left:0;position:absolute;width:20px}
.pp_top .pp_middle,.pp_bottom .pp_middle{height:20px;left:20px;position:absolute;right:20px}
* html .pp_top .pp_middle,* html .pp_bottom .pp_middle{left:0;position:static}
.pp_top .pp_right,.pp_bottom .pp_right{height:20px;left:auto;position:absolute;right:0;top:0;width:20px}
.pp_fade,.pp_gallery li.default a img{display:none}
body div.pp_overlay{
opacity: 0.7 !important;
}
body div.pp_default .pp_content_container .pp_left{background: none; padding: 0px;}
body div.pp_default .pp_content_container .pp_right{background: none; padding: 0px;}
body div.pp_default .pp_top,
body div.pp_default .pp_top .pp_middle,
body div.pp_default .pp_top .pp_left,
body div.pp_default .pp_top .pp_right,
body div.pp_default .pp_bottom,
body div.pp_default .pp_bottom .pp_left,
body div.pp_default .pp_bottom .pp_middle,
body div.pp_default .pp_bottom .pp_right{
background: none;
display: none;
}
body div.pp_default .pp_expand{
display: none !important;
}
body div.pp_default .pp_content{
background: none;
}
body a.pp_next,
body a.pp_previous{
background: none !important;
opacity: 0;
-webkit-transition: opacity 0.3s ease-in-out;
-moz-transition: opacity 0.3s ease-in-out;
-ms-transition: opacity 0.3s ease-in-out;
-o-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
}
body div.pp_default .pp_content:hover a.pp_next,
body div.pp_default .pp_content:hover a.pp_previous{
opacity: 1;
}
body a.pp_next:after {
border: 2px solid #FFFFFF;
border-radius: 50px;
color: #FFFFFF;
content: "\f105";
display: block !important;
font-family: 'FontAwesome',serif;
font-size: 30px;
height: 54px;
line-height: 54px;
margin: -27px 0 0;
position: absolute;
right: 25px;
text-align: center;
top: 50%;
width: 54px;
text-indent: 0px;
}
body a.pp_previous:after {
border: 2px solid #FFFFFF;
border-radius: 50px;
color: #FFFFFF;
content: "\f104";
display: block !important;
font-family: 'FontAwesome',serif;
font-size: 30px;
height: 54px;
line-height: 54px;
margin: -27px 0 0;
position: absolute;
left: 25px;
text-align: center;
top: 50%;
width: 54px;
text-indent: 0px;
}
body div.pp_default .pp_content_container .pp_details{
opacity: 0.7;
}
body div.pp_default .pp_description{
display: none !important;
}
body div.pp_default .pp_nav{
float: none;
width: auto;
margin: 0px;
}
body div.pp_default .pp_nav .currentTextHolder{
left: auto;
position: relative;
float: left;
padding: 0px 20px;
font-family: 'Raleway', sans-serif;
font-size: 15px;
color: #ffffff;
font-weight: 600;
}
body .pp_gallery{
display: none !important;
}
body div.pp_default .pp_nav .pp_play,
body div.pp_default .pp_nav .pp_pause{
display: none;
}
body div.pp_default a.pp_arrow_previous,
body div.pp_default a.pp_arrow_next{
background: none;
position: relative;
left: 0px;
}
body div.pp_default a.pp_arrow_previous:after{
color: #FFFFFF;
content: "\f104";
font-family: 'FontAwesome',serif;
font-size: 20px;
height: 20px;
line-height: 20px;
text-align: center;
width: 20px;
text-indent: 0px;
position: absolute;
top: 0px;
left: 0px;
}
body div.pp_default a.pp_arrow_next:after{
color: #FFFFFF;
content: "\f105";
font-family: 'FontAwesome',serif;
font-size: 20px;
height: 20px;
line-height: 20px;
text-align: center;
width: 20px;
text-indent: 0px;
position: absolute;
top: 0px;
right: 0px;
}
body div.pp_default .pp_close{
background: none;
opacity: 1 !important;
}
body div.pp_default .pp_close:after{
color: #FFFFFF;
content: "\f00d";
font-family: 'FontAwesome',serif;
font-size: 15px;
height: 15px;
line-height: 30px;
text-align: center;
width: 30px;
text-indent: 0px;
position: absolute;
top: 0px;
left: 0px;
}
/* ==========================================================================
Pretty Photo style end
========================================================================== */
/**** Audio css ****/
.mejs-container {
position: relative;
text-align: left;
vertical-align: top;
text-indent: 0;
height: 40px !important;
border-radius: 4px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
background-color:#fff;
}
.mejs-container.wp-audio-shortcode {
height: 30px !important;
border-radius: 0;
-webkit-border-radius: 0;
-moz-border-radius: 0;
}
.blog_holder.masonry .mejs-container {
border:none;
}
.blog_holder.small_images article .post_text .post_inner .mejs-container{
margin: 0 0 15px;
}
.me-plugin {
position: absolute;
}
.mejs-embed, .mejs-embed body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
.mejs-fullscreen {
/* set it to not show scroll bars so 100% will work */
overflow: hidden !important;
}
.mejs-container-fullscreen {
position: fixed;
left: 0;
top: 0;
right: 0;
bottom: 0;
overflow: hidden;
z-index: 1000;
}
.mejs-container-fullscreen .mejs-mediaelement,
.mejs-container-fullscreen video {
width: 100%;
height: 100%;
}
.mejs-clear {
clear: both;
}
/* Start: LAYERS */
.mejs-background {
position: absolute;
top: 0;
left: 0;
}
.mejs-mediaelement {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
-webkit-border-radius:4px;
-moz-border-radius:4px;
border-radius:4px;
}
.blog_holder.masonry .mejs-mediaelement{
border: none;
}
.mejs-poster {
position: absolute;
top: 0;
left: 0;
background-size: contain;
background-position: 50% 50% ;
background-repeat: no-repeat ;
}
:root .mejs-poster img {
display: none ;
}
.mejs-poster img {
border: 0;
padding: 0;
border: 0;
}
.mejs-overlay {
position: absolute;
top: 0;
left: 0;
}
.mejs-overlay-play {
cursor: pointer;
}
/* End: LAYERS */
/* Start: CONTROL BAR */
.mejs-container .mejs-controls {
position: absolute;
list-style-type: none;
margin: 0;
padding: 0;
bottom: 0;
left: 0;
height: 40px;
width: 100%;
}
.mejs-container .mejs-controls div{
list-style-type: none;
background-image: none;
display: block;
float: left;
margin: 0;
padding: 0;
width: 35px;
height: 40px;
border: 0;
}
.mejs-controls .mejs-button button {
cursor: pointer;
display: block;
font-size: 0;
line-height: 0;
text-decoration: none;
margin: 14px 15px 13px 15px;
padding: 0;
position: absolute;
width: 12px;
height: 13px;
border: 0;
background: transparent;
}
.no-svg .mejs-controls .mejs-button button {
background-image: url(img/audio/controls.png);
}
/* :focus for accessibility */
.mejs-controls .mejs-button button:focus {
outline: none;
}
/* End: CONTROL BAR */
/* Start: Time (Current / Duration) */
.mejs-container .mejs-controls .mejs-time {
color: #000;
display: block;
height: 40px;
width: auto;
padding: 0;
overflow: hidden;
text-align: center;
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box;
box-sizing: content-box;
}
.mejs-container .mejs-controls .mejs-time span {
color: #000;
font-size: 13px;
font-weight: 400;
line-height: 40px;
display: block;
float: left;
margin: 0;
width: auto;
}
/* End: Time (Current / Duration) */
/* Start: Play/Pause/Stop */
.mejs-controls .mejs-play button {
background-image: url(img/audio/play.png);
background-repeat: no-repeat;
background-position: center;
}
.mejs-controls .mejs-pause button {
background-image: url(img/audio/pause.png);
background-repeat: no-repeat;
background-position: center;
}
.mejs-controls .mejs-stop button {
background-image: url(img/audio/stop.png);
background-repeat: no-repeat;
background-position: center;
}
/* Start: Play/Pause/Stop */
/* Start: Progress Bar */
.mejs-controls div.mejs-time-rail {
direction: ltr;
width: 200px;
}
.mejs-controls .mejs-time-rail span {
display: block;
position: absolute;
width: auto;
height: 8px;
margin: 16px 15px;
cursor: pointer;
}
.mejs-controls .mejs-time-rail .mejs-time-total {
background-color: #dddddd;
}
.mejs-controls .mejs-time-rail .mejs-time-buffering {
width: 100%;
background-image: -o-linear-gradient(-45deg, rgba(224, 222, 222, 0.15) 25%, transparent 25%, transparent 50%, rgba(224, 222, 222, 0.15) 50%, rgba(224, 222, 222, 0.15) 75%, transparent 75%, transparent);
background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(224, 222, 222, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(224, 222, 222, 0.15)), color-stop(0.75, rgba(224, 222, 222, 0.15)), color-stop(0.75, transparent), to(transparent));
background-image: -webkit-linear-gradient(-45deg, rgba(224, 222, 222, 0.15) 25%, transparent 25%, transparent 50%, rgba(224, 222, 222, 0.15) 50%, rgba(224, 222, 222, 0.15) 75%, transparent 75%, transparent);
background-image: -moz-linear-gradient(-45deg, rgba(224, 222, 222, 0.15) 25%, transparent 25%, transparent 50%, rgba(224, 222, 222, 0.15) 50%, rgba(224, 222, 222, 0.15) 75%, transparent 75%, transparent);
background-image: -ms-linear-gradient(-45deg, rgba(224, 222, 222, 0.15) 25%, transparent 25%, transparent 50%, rgba(224, 222, 222, 0.15) 50%, rgba(224, 222, 222, 0.15) 75%, transparent 75%, transparent);
background-image: linear-gradient(-45deg, rgba(224, 222, 222, 0.15) 25%, transparent 25%, transparent 50%, rgba(224, 222, 222, 0.15) 50%, rgba(224, 222, 222, 0.15) 75%, transparent 75%, transparent);
-webkit-background-size: 15px 15px;
-moz-background-size: 15px 15px;
-o-background-size: 15px 15px;
background-size: 15px 15px;
-webkit-animation: buffering-stripes 2s linear infinite;
-moz-animation: buffering-stripes 2s linear infinite;
-ms-animation: buffering-stripes 2s linear infinite;
-o-animation: buffering-stripes 2s linear infinite;
animation: buffering-stripes 2s linear infinite;
}
@-webkit-keyframes buffering-stripes { from {background-position: 0 0;} to {background-position: 30px 0;} }
@-moz-keyframes buffering-stripes { from {background-position: 0 0;} to {background-position: 30px 0;} }
@-ms-keyframes buffering-stripes { from {background-position: 0 0;} to {background-position: 30px 0;} }
@-o-keyframes buffering-stripes { from {background-position: 0 0;} to {background-position: 30px 0;} }
@keyframes buffering-stripes { from {background-position: 0 0;} to {background-position: 30px 0;} }
.mejs-controls .mejs-time-rail .mejs-time-loaded {
width: 0;
margin: 0px;
}
.mejs-controls .mejs-time-rail .mejs-time-current {
background-color: #1abc9c;
margin: 0px;
}
.mejs-controls .mejs-time-rail .mejs-time-handle {
display: none;
position: absolute;
margin: 0;
width: 10px;
background-color: #1abc9c;
cursor: pointer;
top: 0px;
text-align: center;
}
.mejs-controls .mejs-time-rail .mejs-time-float {
position: absolute;
display: none;
width: 36px;
height: 15px;
top: -35px;
margin-left: -18px;
text-align: center;
color: #000;
}
.mejs-controls .mejs-time-rail .mejs-time-float-current {
margin: 2px;
width: 30px;
display: block;
text-align: center;
left: 0;
}
.mejs-controls .mejs-time-rail .mejs-time-float-corner {
display: none;
}
.mejs-long-video .mejs-controls .mejs-time-rail .mejs-time-float {
width: 48px;
}
.mejs-long-video .mejs-controls .mejs-time-rail .mejs-time-float-current {
width: 44px;
}
.mejs-long-video .mejs-controls .mejs-time-rail .mejs-time-float-corner {
left: 18px;
}
/* End: Progress Bar */
/* Start: Mute/Volume */
.mejs-controls .mejs-volume-button {
background-image: url(img/audio/sound.png);
background-repeat: no-repeat;
background-position: center;
}
.mejs-controls .mejs-mute button {
background-image: url(img/audio/sound.png);
background-repeat: no-repeat;
background-position: center;
}
.mejs-controls .mejs-unmute button {
background-image: url(img/audio/mute.png);
background-repeat: no-repeat;
background-position: center;
}
.mejs-controls .mejs-volume-button {
position: relative;
}
.mejs-controls .mejs-volume-button button{
width: 18px;
height: 16px;
margin: 12px 6px 12px 11px;
}
.mejs-controls .mejs-volume-button .mejs-volume-slider {
display: none;
height: 115px;
width: 25px;
background-image: url(img/audio/sound.png);
background-repeat: no-repeat;
background-position: center;
top: -115px;
left: 0;
z-index: 1;
position: absolute;
margin: 0;
}
.mejs-controls .mejs-volume-button .mejs-volume-slider .mejs-volume-total {
position: absolute;
left: 11px;
top: 8px;
width: 2px;
height: 100px;
margin: 0;
}
.mejs-controls .mejs-volume-button .mejs-volume-slider .mejs-volume-current {
position: absolute;
left: 11px;
top: 8px;
width: 2px;
height: 100px;
margin: 0;
}
.mejs-controls .mejs-volume-button .mejs-volume-slider .mejs-volume-handle {
position: absolute;
left: 4px;
top: -3px;
width: 16px;
height: 6px;
cursor: N-resize;
margin: 0;
}
/* horizontal version */
.mejs-controls div.mejs-horizontal-volume-slider {
height: 40px;
width: 45px;
position: relative;
}
.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total {
position: absolute;
left: 0;
top: 16px;
width: 35px;
height: 8px;
margin: 0;
padding: 0;
font-size: 1px;
background-color: #dddddd;
}
.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current {
position: absolute;
left: 0;
top: 16px;
width: 40px;
height: 8px;
margin: 0;
padding: 0;
font-size: 1px;
background-color: #1abc9c;
}
.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-handle {
display: none;
}
/* End: Mute/Volume */
/* Start: Error */
.me-cannotplay {
}
.me-cannotplay a {
color: #fff;
font-weight: bold;
}
.me-cannotplay span {
padding: 15px;
display: block;
}
/* End: Error */
/* Start: Loop */
.mejs-controls .mejs-loop-off button {
background-position: -64px -16px;
}
.mejs-controls .mejs-loop-on button {
background-position: -64px 0;
}
/* End: Loop */
/* Start: backlight */
.mejs-controls .mejs-backlight-off button {
background-position: -80px -16px;
}
.mejs-controls .mejs-backlight-on button {
background-position: -80px 0;
}
/* End: backlight */
/* ==========================================================================
Pie full styles
========================================================================== */
.q_pie_graf_holder,
.q_line_graf_holder {
display: block;
position: relative;
overflow: hidden;
}
.q_pie_graf,
.q_line_graf{
margin: 0 22px 0 0;
float: left;
}
.q_pie_graf_legend{
position: relative;
float: left;
width: 40%;
}
.q_line_graf_legend{
position: relative;
float: left;
width: 20%;
}
.q_pie_graf_legend ul,
.q_line_graf_legend ul{
list-style: none;
padding:0;
}
.q_pie_graf_legend ul li,
.q_line_graf_legend ul li{
display: block;
margin: 0 0 10px 0;
}
.q_pie_graf_legend ul li .color_holder,
.q_line_graf_legend ul li .color_holder{
width: 25px;
height: 25px;
background-color: #1abc9c;
float: left;
}
.q_pie_graf_legend ul li p,
.q_line_graf_legend ul li p{
line-height: 25px;
margin: 0;
padding: 0 0 0 50px;
}
/* ==========================================================================
WPML styles
========================================================================== */
.header_top .right #lang_sel ul ul img.iclflag,
.header_top .right #lang_sel_click ul ul img.iclflag {
float: right;
top: 11px;
margin-right: 0;
margin-left: 15px;
}
.header_top .left #lang_sel ul ul img.iclflag,
.header_top .left #lang_sel_click ul ul img.iclflag {
float: left;
top: 11px;
}
.header_top .right #lang_sel ul ul,
.header_top .right #lang_sel_click ul ul {
left: auto;
right: 0;
}
.header_top #lang_sel_click ul ul{
padding: 5px 15px !important;
}
.header_top .right #lang_sel ul ul li ,
.header_top .right #lang_sel_click ul ul li {
width: 100%;
text-align: right;
}
.header_top .left #lang_sel ul ul li ,
.header_top .left #lang_sel_click ul ul li {
width: 100%;
}
.header_top #lang_sel ul ul li img.iclflag,
.header_top #lang_sel_click ul ul li img.iclflag {
position: relative;
top: 11px;
}
.header_top #lang_sel li,
.header_top #lang_sel_click li {
width: auto;
}
.header_top #lang_sel, .header_top #lang_sel_click {
font-family: inherit;
float: left;
padding: 0 0 0 0px;
z-index: 1000;
height: 33px;
position: relative;
}
.header_top #lang_sel ul > li > a,
.header_top #lang_sel_click ul > li > a {
width: auto;
float: none;
padding: 0 15px !important;
}
.header_top #lang_sel > ul > li:hover,
.header_top #lang_sel_click > ul > li:hover {
border-bottom: none !important;
}
.header_top #lang_sel > ul > li > a,
.header_top #lang_sel_click > ul > li> a {
color: #777 !important;
line-height: 33px !important;
height: 33px;
z-index: 2500;
font-size:13px;
}
.header_top #lang_sel > ul > li > a:hover,
.header_top #lang_sel_click > ul > li> a:hover{
color: #1abc9c !important;
}
.header_top .left #lang_sel > ul > li > a,
.header_top .left #lang_sel_click > ul > li> a {
left: 0;
right: auto;
}
.header_top #lang_sel > ul > li > a:hover,
.header_top #lang_sel_click > ul > li> a:hover,
.header_top #lang_sel > ul > li:hover > a,
.header_top #lang_sel_click > ul > li:hover > a {
top: 0px;
}
.header_top #lang_sel ul > li ul > li,
.header_top #lang_sel_click ul > li ul > li{
padding:0px !important;
}
.header_top #lang_sel ul > li a.lang_sel_sel,
.header_top #lang_sel_click ul > li a.lang_sel_sel {
background: 0;
line-height: 30px;
border: 0;
padding: 0;
}
.header_top .right #lang_sel ul > li a.lang_sel_sel,
.header_top .right #lang_sel_click ul > li a.lang_sel_sel {
text-align: right;
}
.header_top .right #lang_sel ul > li a.lang_sel_sel {
padding-right: 0 !important;
}
.header_top .left #lang_sel ul > li a.lang_sel_sel {
padding-left: 0 !important;
}
.header_top #lang_sel .lang_sel_sel:after,
.header_top #lang_sel_click .lang_sel_sel:after {
content: "\f107";
font-family: 'FontAwesome', sans-serif;
margin-left: 5px;
}
.header_top .left #lang_sel ul > li a.lang_sel_sel,
.header_top .left #lang_sel_click ul > li a.lang_sel_sel {
text-align: left;
}
.header_bottom .main_menu .submenu-languages {
display: none;
}
.header_top #lang_sel ul ul ,
.header_top #lang_sel_click ul ul {
height: auto;
border-top: none;
background-color: #262626;
z-index:1000;
position:absolute;
list-style: none;
top: 33px;
left: -1px;
width: 180px;
}
.header_top #lang_sel ul li ul li a,
.header_top #lang_sel ul li ul li a:visited,
.header_top #lang_sel_click ul li ul li a,
.header_top #lang_sel_click ul li ul li a:visited {
background: 0;
border: 0;
color: #9d9d9d;
display: block;
height: 38px;
white-space: nowrap;
font-weight: 600;
font-size: 11px;
text-transform: uppercase;
line-height: 38px;
padding: 0 15px !important;
border-bottom: 1px solid #303030;
-webkit-transition: color 0.3s ease-in-out;
-moz-transition: color 0.3s ease-in-out;
-ms-transition: color 0.3s ease-in-out;
-o-transition: color 0.3s ease-in-out;
transition: color 0.3s ease-in-out;
}
.header_top #lang_sel ul li ul li:last-child a,
.header_top #lang_sel_click ul li ul li:last-child a{
border-bottom: none;
}
.header_top #lang_sel ul li ul li a:hover,
.header_top #lang_sel_click ul li ul li a:hover{
color: #fff;
}
.header_top #lang_sel_list {
font-family: inherit;
height: auto;
width: auto;
float: left;
}
.header_top #lang_sel_list ul {
border: 0;
padding: 0 !important;
width: auto;
}
.header_top #lang_sel_list li {
display: inline-block;
float: none;
width: auto;
}
.header_top #lang_sel_list ul li a,
.header_top #lang_sel_list ul li a:visited {
padding: 0 8px 0 8px;
border: 0;
background: none repeat scroll 0 0 transparent;
line-height: 33px;
font-size: 13px;
color: #818181;
margin: 0 !important;
-webkit-transition: color 0.3s ease-in-out;
-moz-transition: color 0.3s ease-in-out;
-ms-transition: color 0.3s ease-in-out;
-o-transition: color 0.3s ease-in-out;
transition: color 0.3s ease-in-out;
}
.header_top #lang_sel_list ul li a.lang_sel_sel,
.header_top #lang_sel_list ul li a:hover{
color: #1abc9c;
}
.header_top #lang_sel img.iclflag,
.header_top #lang_sel_click img.iclflag,
.header_top #lang_sel_list img.iclflag {
display: inline;
float: none;
top: 1px;
position: relative;
margin-right: 5px;
}
aside .widget.posts_holder #lang_sel li:after,
aside .widget.posts_holder #lang_sel_click li:after{
content:none;
}
aside .widget #lang_sel_list,
section.side_menu #lang_sel_list,
footer #lang_sel_list {
height: auto;
font-family: inherit;
width:100%;
}
aside .widget #lang_sel_list li,
section.side_menu #lang_sel_list li,
footer #lang_sel_list li{
float: none;
margin-bottom: 0px !important;
padding: 9px 10px 9px 0px !important;
width:auto;
}
footer #lang_sel_list li{
padding: 5px 5px 5px 0px !important;
}
aside .widget #lang_sel_list li a,
aside .widget #lang_sel li a,
aside .widget #lang_sel_click li a,
section.side_menu #lang_sel_list li a,
section.side_menu #lang_sel li a,
section.side_menu #lang_sel_click li a,
footer #lang_sel_list li a,
footer #lang_sel li a,
footer #lang_sel_click li a {
font-family: inherit;
font-size: 13px;
font-weight: 400;
border: 0;
color: #777;
}
aside .widget #lang_sel_list li a,
section.side_menu #lang_sel_list li a,
aside .widget #lang_sel_list li a,
footer #lang_sel_list li a {
display: inline;
}
aside .widget #lang_sel li,
aside .widget #lang_sel_click li,
section.side_menu #lang_sel li,
section.side_menu #lang_sel_click li,
footer #lang_sel li,
footer #lang_sel_click li {
margin-bottom: 0;
}
aside .widget #lang_sel,
aside .widget #lang_sel_click,
section.side_menu #lang_sel,
section.side_menu #lang_sel_click,
footer #lang_sel,
footer #lang_sel_click {
width: 100%;
}
aside .widget #lang_sel > ul > li > a,
aside .widget #lang_sel_click > ul > li > a,
section.side_menu #lang_sel > ul > li > a,
section.side_menu #lang_sel_click > ul > li > a,
footer #lang_sel > ul > li > a,
footer #lang_sel_click > ul > li > a {
height: 35px;
line-height: 35px !important;
font-family: inherit;
font-weight: 300;
padding-left: 13px;
font-weight: 300;
background-image: url(img/wc_select_arrow.png) !important;
background-repeat: no-repeat;
background-position: right;
}
footer #lang_sel > ul > li > a,
footer #lang_sel_click > ul > li > a,
section.side_menu #lang_sel > ul > li > a,
section.side_menu #lang_sel_click > ul > li > a {
background-image: url(img/wc_select_arrow_footer.png) !important;
background-repeat: no-repeat;
background-position: right;
}
aside .widget #lang_sel > ul > li a,
aside .widget #lang_sel_click > ul > li a{
background-color: #fff;
}
footer #lang_sel > ul > li a,
footer #lang_sel_click > ul > li a,
section.side_menu #lang_sel > ul > li a,
section.side_menu #lang_sel_click > ul > li a{
background-color: #262626 !important;
}
footer #lang_sel ul li a,
footer #lang_sel ul ul a,
footer #lang_sel_click ul li a,
footer #lang_sel_click ul ul a,
footer #lang_sel_click ul ul a span,
section.side_menu #lang_sel ul li a,
section.side_menu #lang_sel ul ul a,
section.side_menu #lang_sel ul ul a:visited,
section.side_menu #lang_sel_click > ul > li > a,
section.side_menu #lang_sel_click ul ul a,
section.side_menu #lang_sel_click ul ul a:visited{
color: #777 !important;
}
aside .widget #lang_sel > ul li a,
aside .widget #lang_sel ul ul a,
aside .widget #lang_sel_click > ul li a,
aside .widget #lang_sel_click ul ul a,
aside .widget #lang_sel_list li a{
color: #adadad;
font-family: 'Raleway', sans-serif;
background-color: #fff;
}
aside .widget #lang_sel a.lang_sel_sel:hover,
aside .widget #lang_sel_click a.lang_sel_sel:hover,
aside .widget #lang_sel ul ul a:hover,
aside .widget #lang_sel_click ul ul a:hover,
aside .widget #lang_sel_list li a.lang_sel_sel,
aside .widget #lang_sel_list li a:hover{
color: #1abc9c;
}
footer #lang_sel_list li a:hover,
footer #lang_sel a.lang_sel_sel,
footer #lang_sel a.lang_sel_sel:hover,
footer #lang_sel ul ul a:hover,
footer #lang_sel_click a.lang_sel_sel,
footer #lang_sel_click ul ul a:hover,
footer #lang_sel_click ul ul a:hover span,
footer #lang_sel_list a.lang_sel_sel,
footer #lang_sel_list ul ul a:hover,
footer #lang_sel_list ul ul a:hover span,
section.side_menu a.lang_sel_sel,
section.side_menu #lang_sel ul li a.lang_sel_sel,
section.side_menu #lang_sel_click ul li a.lang_sel_sel,
section.side_menu #lang_sel_list li a:hover,
section.side_menu #lang_sel ul ul a:hover,
section.side_menu #lang_sel_click ul ul a:hover,
section.side_menu #lang_sel_click ul ul a:hover span{
color: #fff !important;
}
aside .widget #lang_sel li,
aside .widget #lang_sel_click li,
section.side_menu #lang_sel li,
section.side_menu #lang_sel_click li,
footer #lang_sel li,
footer #lang_sel_click li {
width: 100%;
padding:0;
border:none;
}
aside .widget #lang_sel ul ul,
aside .widget #lang_sel_click ul ul{
width: 100%;
top:32px;
height: auto;
border: 0;
z-index: 1000;
padding:3px 0 0 0;
overflow:hidden;
}
footer #lang_sel ul ul,
footer #lang_sel_click ul ul ,
section.side_menu #lang_sel ul ul,
section.side_menu #lang_sel_click ul ul{
width: 100%;
top:32px;
border: 0;
}
section.side_menu #lang_sel li a:after,
section.side_menu #lang_sel li:before{
display:none;
}
section.side_menu #lang_sel ul ul a, #lang_sel ul ul a:visited{
padding: 8px 10px;
}
footer #lang_sel ul ul,
footer #lang_sel_click ul ul,
section.side_menu #lang_selul ul,
section.side_menu #lang_sel_click ul ul {
left: 0 !important;
}
aside .widget #lang_sel ul ul a,
aside .widget #lang_sel_click ul ul a,
aside .widget #lang_sel ul ul a:visited,
aside .widget #lang_sel_click ul ul a:visited{
padding: 10px 13px;
}
footer #lang_sel ul ul a,
footer #lang_sel_click ul ul a,
footer #lang_sel ul ul a:visited,
footer #lang_sel_click ul ul a:visited{
padding: 10px 13px;
}
aside .widget #lang_sel_list.lang_sel_list_vertical ul,
section.side_menu #lang_sel_list.lang_sel_list_vertical ul,
footer #lang_sel_list.lang_sel_list_vertical ul {
height: auto;
border-top: none;
}
aside .widget #lang_sel_list.lang_sel_list_vertical a,
aside .widget #lang_sel_list.lang_sel_list_vertical a:visited,
section.side_menu #lang_sel_list.lang_sel_list_vertical a,
section.side_menu #lang_sel_list.lang_sel_list_vertical a:visited,
footer #lang_sel_list.lang_sel_list_vertical a,
footer #lang_sel_list.lang_sel_list_vertical a:visited {
border: none;
padding: 0;
}
section.side_menu #lang_sel_list.lang_sel_list_vertical a,
section.side_menu #lang_sel_list.lang_sel_list_vertical a:visited,
section.side_menu #lang_sel_list.lang_sel_list_horizontal a,
section.side_menu #lang_sel_list.lang_sel_list_horizontal a:visited,
footer #lang_sel_list.lang_sel_list_vertical a,
footer #lang_sel_list.lang_sel_list_vertical a:visited,
footer #lang_sel_list.lang_sel_list_horizontal a,
footer #lang_sel_list.lang_sel_list_horizontal a:visited {
background: transparent;
}
aside #lang_sel img.iclflag,
aside #lang_sel_click img.iclflag,
section.side_menu #lang_sel img.iclflag,
section.side_menu #lang_sel_click img.iclflag,
footer #lang_sel img.iclflag,
footer #lang_sel_click img.iclflag,
footer #lang_sel_list.lang_sel_list_horizontal a img,
footer #lang_sel_list.lang_sel_list_vertical a img {
margin-right: 5px;
}
footer #lang_sel_list.lang_sel_list_horizontal a:hover,
footer #lang_sel_list.lang_sel_list_vertical a:hover,
.side_menu #lang_sel_list.lang_sel_list_horizontal a:hover,
.side_menu #lang_sel_list.lang_sel_list_vertical a:hover {
color: #fff;
}
footer #lang_sel_list.lang_sel_list_horizontal a,
footer #lang_sel_list.lang_sel_list_vertical a,
.side_menu #lang_sel_list.lang_sel_list_horizontal a,
.side_menu #lang_sel_list.lang_sel_list_vertical a {
color: #777;
}
#lang_sel_footer {
background-color: #111111;
border: none;
z-index: 1500;
position: relative;
font-family: 'Roboto', sans-serif;
}
#lang_sel_footer a {
font-size: 13px;
color: #777;
-webkit-transition: color 0.3s ease 0s !important;
-moz-transition: color 0.3s ease 0s !important;
-o-transition: color 0.3s ease 0s !important;
-ms-transition: color 0.3s ease 0s !important;
transition: color 0.3s ease 0s !important;
}
#lang_sel_footer a:hover {
color: #fff;
-webkit-transition: color 0.3s ease 0s !important;
-moz-transition: color 0.3s ease 0s !important;
-o-transition: color 0.3s ease 0s !important;
-ms-transition: color 0.3s ease 0s !important;
transition: color 0.3s ease 0s !important;
}
#lang_sel_footer a img {
margin-right: 15px;
}
/* ==========================================================================
End of WPML styles
========================================================================== */
.ls-nav-prev,
.ls-nav-next {
position: absolute;
display: block !important;
line-height: 40px;
margin: -20px 0 0;
top: 60%;
z-index: 90;
cursor: pointer;
opacity: 0.6 !important;
filter: alpha(opacity=60) !important;
}
.ls-nav-prev{
background-image:none !important;
background-color: transparent !important;
height: 54px;
width: 54px;
border: 2px solid #fff !important;
line-height: 54px;
font-size: 14px;
position: absolute;
top: 50%;
margin-top: -27px;
text-align: center;
z-index: 10;
-webkit-transition: opacity .3s ease 0s !important;
-moz-transition: opacity .3s ease 0s !important;
-o-transition: opacity .3s ease 0s !important;
transition: opacity .3s ease-in-out !important;
opacity: 0.7;
-webkit-border-radius: 56px;
-moz-border-radius: 56px;
-ms-border-radius: 56px;
-o-border-radius: 56px;
border-radius: 56px;
position: absolute;
left: 23px;
}
.ls-nav-prev:after {
position: absolute;
left: 0 !important;
color: #fff;
width: 100%;
height: 100%;
content: "\f104";
font-family: 'FontAwesome', serif;
line-height: 54px;
text-align:center;
display: block !important;
font-size:30px;
}
.ls-nav-next{
background-image:none !important;
background-color: transparent !important;
height: 54px;
width: 54px;
border: 2px solid #fff !important;
line-height: 54px;
font-size: 14px;
position: absolute;
top: 50%;
margin-top: -27px;
text-align: center;
z-index: 10;
-webkit-transition: opacity .3s ease 0s;
-moz-transition: opacity .3s ease 0s;
-o-transition: opacity .3s ease 0s;
transition: opacity .3s ease-in-out;
opacity: 0;
-webkit-border-radius: 56px;
-moz-border-radius: 56px;
-ms-border-radius: 56px;
-o-border-radius: 56px;
border-radius: 56px;
right: 23px;
}
.ls-nav-next:after {
position: absolute;
left: 0 !important;
color: #fff;
width: 100%;
height: 100%;
content: "\f105";
font-family: 'FontAwesome', serif;
line-height: 54px;
text-align:center;
display: block !important;
font-size:30px;
}
.ls-nav-prev:hover,
.ls-nav-next:hover{
opacity: 1 !important;
filter: alpha(opacity=100) !important;
}
.element_from_left,
.element_from_right,
.element_from_top,
.element_from_bottom,
.element_from_fade{
display: inline-block;
width: 100%;
}
.touch .no_animation_on_touch .element_from_left>div,
.touch .no_animation_on_touch .element_from_right>div,
.touch .no_animation_on_touch .element_from_top>div,
.touch .no_animation_on_touch .element_from_bottom>div,
.touch .no_animation_on_touch .element_from_fade>div,
.touch .no_animation_on_touch .element_transform>div{
opacity: 1;
filter: alpha(opacity = 100);
-webkit-transform: scale(1);
-moz-transform: scale(1);
-o-transform: scale(1);
transform: scale(1);
-webkit-animation: none;
-moz-animation: none;
-o-animation: none;
animation: none;
}
.element_from_left > div,
.element_from_right > div,
.element_from_top > div,
.element_from_bottom > div,
.element_from_fade > div {
opacity: 0;
display: inline-block;
width: 100%;
filter: alpha(opacity = 0);
}
.element_transform > div{
opacity: .2;
-webkit-transform: scale(0.5);
-moz-transform: scale(0.5);
-o-transform: scale(0.5);
transform: scale(0.5);
}
.element_from_fade.element_from_fade_on > div {
opacity: 1;
filter: alpha(opacity = 100);
-webkit-transition: opacity .8s ease 0s;
-moz-transition: opacity .8s ease 0s;
-o-transition: opacity .8s ease 0s;
-webkit-backface-visibility: hidden;
}
.element_from_left.element_from_left_on > div {
-webkit-animation: element-from-left 0.7s 1 ease-in-out;
-moz-animation: element-from-left 0.7s 1 ease-in-out;
-o-animation: element-from-left 0.7s 1 ease-in-out;
animation: element-from-left 0.7s 1 ease-in-out;
opacity: 1;
filter: alpha(opacity = 100);
-webkit-backface-visibility: hidden;
}
.element_from_right.element_from_right_on>div {
-webkit-animation: element-from-right 0.7s 1 ease-in-out;
-moz-animation: element-from-right 0.7s 1 ease-in-out;
-o-animation: element-from-right 0.7s 1 ease-in-out;
animation: element-from-right 0.7s 1 ease-in-out;
opacity: 1;
filter: alpha(opacity = 100);
-webkit-backface-visibility: hidden;
}
.element_from_top.element_from_top_on>div {
-webkit-animation: element-from-top 0.7s 1 ease-in-out;
-moz-animation: element-from-top 0.7s 1 ease-in-out;
-o-animation: element-from-top 0.7s 1 ease-in-out;
animation: element-from-top 0.7s 1 ease-in-out;
opacity: 1;
filter: alpha(opacity = 100);
-webkit-backface-visibility: hidden;
}
.element_from_bottom.element_from_bottom_on>div {
-webkit-animation: element-from-bottom 0.7s 1 ease-in-out;
-moz-animation: element-from-bottom 0.7s 1 ease-in-out;
-o-animation: element-from-bottom 0.7s 1 ease-in-out;
animation: element-from-bottom 0.7s 1 ease-in-out;
opacity: 1;
filter: alpha(opacity = 100);
-webkit-backface-visibility: hidden;
}
.element_transform.element_transform_on>div {
-webkit-animation: element-transform .4s 1 cubic-bezier(0.175, 0.885, 0.320, 1.275);
-moz-animation: element-transform .4s 1 cubic-bezier(0.175, 0.885, 0.320, 1.275);
-o-animation: element-transform .4s 1 cubic-bezier(0.175, 0.885, 0.320, 1.275);
animation: element-transform .4s 1 cubic-bezier(0.175, 0.885, 0.320, 1.275);
opacity: 1;
-webkit-transform: scale(1);
-moz-transform: scale(1);
-o-transform: scale(1);
transform: scale(1);
}
@-webkit-keyframes element-from-left {
0% {
-webkit-transform: translate(-20%, 0);
opacity: 0;
}
100% {
-webkit-transform: translate(0, 0);
opacity: 1;
}
}
@-moz-keyframes element-from-left {
0% {
-moz-transform: translate(-20%, 0);
opacity: 0;
}
100% {
-moz-transform: translate(0, 0);
opacity: 1;
}
}
@-o-keyframes element-from-left {
0% {
-o-transform: translate(-20%, 0);
opacity: 0;
}
100% {
-o-transform: translate(0, 0);
opacity: 1;
}
}
@keyframes element-from-left {
0% {
transform: translate(-20%, 0);
opacity: 0;
}
100% {
transform: translate(0, 0);
opacity: 1;
}
}
@-webkit-keyframes element-from-right {
0% {
-webkit-transform: translate(20%, 0);
opacity: 0;
}
100% {
-webkit-transform: translate(0, 0);
opacity: 1;
}
}
@-moz-keyframes element-from-right {
0% {
-moz-transform: translate(20%, 0);
opacity: 0;
}
100% {
-moz-transform: translate(0, 0);
opacity: 1;
}
}
@-o-keyframes element-from-right {
0% {
-o-transform: translate(20%, 0);
opacity: 0;
}
100% {
-o-transform: translate(0, 0);
opacity: 1;
}
}
@keyframes element-from-right {
0% {
transform: translate(20%, 0);
opacity: 0;
}
100% {
transform: translate(0, 0);
opacity: 1;
}
}
@-webkit-keyframes element-from-bottom {
0% {
-webkit-transform: translate(0, 30%);
opacity: 0;
}
100% {
-webkit-transform: translate(0, 0);
opacity: 1;
}
}
@-moz-keyframes element-from-bottom {
0% {
-moz-transform: translate(0, 30%);
opacity: 0;
}
100% {
-moz-transform: translate(0, 0);
opacity: 1;
}
}
@-o-keyframes element-from-bottom {
0% {
-o-transform: translate(0, 30%);
opacity: 0;
}
100% {
-o-transform: translate(0, 0);
opacity: 1;
}
}
@keyframes element-from-bottom {
0% {
transform: translate(0, 30%);
opacity: 0;
}
100% {
transform: translate(0, 0);
opacity: 1;
}
}
@-webkit-keyframes element-from-top {
0% {
-webkit-transform: translate(0, -30%);
opacity: 0;
}
100% {
-webkit-transform: translate(0, 0);
opacity: 1;
}
}
@-moz-keyframes element-from-top {
0% {
-moz-transform: translate(0, -30%);
opacity: 0;
}
100% {
-moz-transform: translate(0, 0);
opacity: 1;
}
}
@-o-keyframes element-from-top {
0% {
-o-transform: translate(0, -30%);
opacity: 0;
}
100% {
-o-transform: translate(0, 0);
opacity: 1;
}
}
@keyframes element-from-top {
0% {
transform: translate(0, -30%);
opacity: 0;
}
100% {
transform: translate(0, 0);
opacity: 1;
}
}
@-webkit-keyframes element-transform {
0% {
-webkit-transform: scale(0.3);
opacity: .1;
}
100% {
-webkit-transform: scale(1);
opacity: 1;
}
}
@-moz-keyframes element-transform {
0% {
-moz-transform: scale(0.3);
opacity: .1;
}
100% {
-moz-transform: scale(1);
opacity: 1;
}
}
@-o-keyframes element-transform {
0% {
-o-transform: scale(0.3);
opacity: .1;
}
100% {
-o-transform: scale(1);
opacity: 1;
}
}
@keyframes element-transform {
0% {
transform: scale(0.3);
opacity: .1;
}
100% {
transform: scale(1);
opacity: 1;
}
}
/* ==========================================================================
Image With Text Over start styles
========================================================================== */
.q_image_with_text_over{
display: inline-block;
position: relative;
margin: 0px;
width: 100%;
}
.q_image_with_text_over.one_half{
width: 50%;
}
.q_image_with_text_over.one_third{
width: 33.33%;
}
.q_image_with_text_over.one_fourth{
width: 25%;
}
.q_image_with_text_over img{
display: block;
position: relative;
width: 100%;
z-index: 10;
}
.q_image_with_text_over .shader{
position: absolute;
width: 100%;
height: 100%;
top: 0px;
left: 0px;
z-index: 20;
background-color: rgba(0,0,0,0.5);
}
.q_image_with_text_over .text{
position: absolute;
width: 100%;
height: 100%;
top: 0px;
left: 0px;
z-index: 30;
text-align: center;
}
.q_image_with_text_over table{
position: absolute;
width: 100%;
height: 100%;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
}
.q_image_with_text_over table td{
padding: 0px;
vertical-align: middle;
background: none !important;
}
.q_image_with_text_over .caption,
.q_image_with_text_over .icon_holder{
opacity: 1;
filter: alpha(opacity = 100);
-webkit-transition: opacity 0.4s ease-in-out;
-moz-transition: opacity 0.4s ease-in-out;
-o-transition: opacity 0.4s ease-in-out;
-ms-transition: opacity 0.4s ease-in-out;
-webkit-transform: translateZ(0px);
}
.q_image_with_text_over .caption{
line-height: 1em;
}
.q_image_with_text_over .text p,
.q_image_with_text_over .caption,
.q_image_with_text_over .icon_holder{
color: #fff;
}
.q_image_with_text_over .icon_holder{
display: inline-block;
}
.q_image_with_text_over .icon_holder.fa-2x{
padding: 0.67em 0.7em;
}
.q_image_with_text_over .icon_holder.fa-3x{
padding: 0.6em 0.62em;
}
.q_image_with_text_over .caption{
margin: 2% 0 0;
}
.q_image_with_text_over .caption.no_icon{
margin: 0;
}
.q_image_with_text_over .desc{
margin: 0px 30px;
opacity: 0;
filter: alpha(opacity = 0);
-webkit-transition: opacity 0.4s ease-in-out;
-moz-transition: opacity 0.4s ease-in-out;
-o-transition: opacity 0.4s ease-in-out;
-ms-transition: opacity 0.4s ease-in-out;
-webkit-backface-visibility:hidden;
-webkit-transform: translateZ(0px);
color:#fff;
}
.q_image_with_text_over .text:hover .caption,
.q_image_with_text_over .text:hover .icon_holder{
opacity: 0;
filter: alpha(opacity = 0);
}
.q_image_with_text_over .text:hover .desc{
opacity: 1;
filter: alpha(opacity = 100);
}
/* ==========================================================================
Image With Text Over end styles
========================================================================== */
/* ==========================================================================
Team start styles
========================================================================== */
.q_team{
background-color:#fff;
overflow:hidden;
}
.q_team_inner{
overflow:hidden;
width: 100%;
}
.q_team .q_team_image{
position:relative;
}
.q_team .q_team_image img{
width:100%;
vertical-align: middle;
}
.q_team .q_team_description_wrapper {
position: absolute;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(255, 255, 255, 0.95);
opacity: 0;
-webkit-transition: opacity 0.3s ease-in-out;
-moz-transition: opacity 0.3s ease-in-out;
-ms-transition: opacity 0.3s ease-in-out;
-o-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
cursor: default;
}
.q_team .q_team_image:hover .q_team_description_wrapper {
opacity: 1;
}
.q_team .q_team_description {
display: table;
width: 100%;
height: 100%;
}
.q_team .q_team_description_inner {
display: table-cell;
vertical-align: middle;
text-align: center;
padding: 0 50px;
}
.q_team .q_team_description_inner p {
color: #303030;
}
.q_team .q_team_text{
padding:23px 16px 23px;
border-style: none;
border-width: 1px;
border-color: #f6f6f6;
border-top:none !important;
}
.q_team .q_team_title_holder{
margin: 0 0 9px;
text-align: center;
}
.q_team .q_team_title_holder .q_team_name{
margin-bottom: 7px;
}
.q_team .q_team_text_inner .separator{
background-color: #1abc9c;
margin-bottom: 16px !important;
}
.q_team .q_team_social_holder{
position: relative;
text-align: center;
}
.q_team .q_team_social_holder .q_social_icon_holder i.simple_social{
font-size: 19px;
color: #bcbcbc;
}
.q_team .q_team_social_holder .q_social_icon_holder:hover i.simple_social {
color: #1abc9c;
}
/*Info on hover style*/
.q_team.info_on_hover .q_team_description_wrapper{
position: relative;
opacity: 1;
background-color: transparent;
box-sizing: border-box;
}
.q_team.info_on_hover .q_team_text{
position: absolute;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(21, 21, 21, 0.78);
padding: 0;
opacity: 0;
-webkit-transition: opacity 0.3s ease-in-out;
-moz-transition: opacity 0.3s ease-in-out;
-ms-transition: opacity 0.3s ease-in-out;
-o-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
}
.q_team.info_on_hover .q_team_text_holder{
display: table;
width: 100%;
height: 100%;
}
.q_team.info_on_hover .q_team_text_holder_inner{
display: table-cell;
vertical-align: middle;
}
.q_team.info_on_hover .q_team_image:hover .q_team_text{
opacity: 1;
}
.q_team.info_on_hover .q_team_title_holder .q_team_name,
.q_team.info_on_hover .q_team_title_holder span,
.q_team.info_on_hover .q_team_social_holder i.simple_social{
color: #fff;
}
/* ==========================================================================
Team end styles
========================================================================== */
/* ==========================================================================
Service shortcode styles
========================================================================== */
.circle_item .circle {
font-size: 15px;
line-height: 13px;
width: 155px;
height: 155px;
display: inline-block;
text-align: center;
color: #000;
background-color: #fbfbfb;
-o-border-radius: 182px;
-moz-border-radius: 182px;
-webkit-border-radius: 182px;
border-radius: 182px;
-webkit-transition: all .5s ease 0s;
-moz-transition: all .5s ease 0s;
-o-transition: all .5s ease 0s;
-webkit-transform: translateZ(0px);
-moz-transform: translateZ(0px);
}
.circle_item .circle div {
padding: 69.5px 0;
}
.circle_left {
width: 100%;
display: inline-block;
margin: 0 0 25px 0;
}
.circle_left .circle {
float: left;
}
.circle_left .text {
padding: 0 10px 0 170px;
}
.circle_top {
width: 100%;
display: inline-block;
text-align: center;
margin: 0 0 25px 0;
}
.circle_top .circle {
margin: 0 auto;
}
.circle_top .text {
margin: 25px 0 0;
}
.circle_top .text p {
margin: 0;
}
.circle_item .circle a {
text-decoration: none;
}
.circle_item .circle:hover {
background-color: #1abc9c;
color: #fff;
}
.circle_item .circle.hover {
cursor: pointer;
}
.circle_item .circle:hover a {
color: #fff;
}
.fade_in_circle_holder {
display: block;
cursor: pointer;
overflow: hidden;
}
.fade_in_circle_holder.animate_circle {
opacity: 1;
filter: alpha(opacity=100);
-webkit-transform: scale(1);
-moz-transform: scale(1);
-o-transform: scale(1);
-ms-transform: scale(1);
transform: scale(1);
}
.fade_in_circle_holder {
display: table;
position: relative;
overflow: hidden;
opacity: 0;
filter: alpha(opacity=0);
-webkit-transform: scale(0.1);
-moz-transform: scale(0.1);
-o-transform: scale(0.1);
-ms-transform: scale(0.1);
-webkit-transition: all .4s ease-in-out;
-moz-transition: all .4s ease-in-out;
-o-transition: all .4s ease-in-out;
-ms-transition: all .4s ease-in-out;
transition: all .4s ease-in-out;
-webkit-backface-visibility: hidden;
z-index: 2000;
}
.touch .no_animation_on_touch .fade_in_circle_holder{
opacity: 1;
filter: alpha(opacity=100);
-webkit-transform: scale(1);
-moz-transform: scale(1);
-o-transform: scale(1);
-ms-transform: scale(1);
transform: scale(1);
}
/* ==========================================================================
Image hover styles
========================================================================== */
.image_hover {
position: relative;
display: inline-block;
width: 100%;
}
.image_hover .images_holder {
position: relative;
display: inline-block;
}
.image_hover .images_holder img.hover_image {
position: absolute;
top: 0;
left: 0;
}
.image_hover .images_holder img.active_image {
opacity: 1;
filter: alpha(opacity = 100);
position: relative;
display: block;
}
.image_hover .images_holder img.active_image,
.image_hover .images_holder img.hover_image,
.image_hover.hovered.show .images_holder img.active_image,
.image_hover.hovered.show .images_holder img.hover_image {
-webkit-transition: all 0.3s ease-in-out;
-ms-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
-webkit-backface-visibility:hidden;
-webkit-transform: translateZ(0px);
}
.image_hover .images_holder img.hover_image {
opacity: 0;
filter: alpha(opacity = 0);
}
.image_hover .images_holder:hover img.active_image,
.image_hover.hovered.show .images_holder img.active_image {
opacity: 0;
filter: alpha(opacity = 0);
}
.image_hover .images_holder:hover img.hover_image,
.image_hover.hovered.show .images_holder img.hover_image {
opacity: 1;
filter: alpha(opacity = 100);
}
/* ==========================================================================
Call to action widget styles
========================================================================== */
/*.content_bottom{
position: relative;
z-index: 100;
}*/
.qode_call_to_action.container {
background-color: #1abc9c;
}
.qode_call_to_action.in_grid {
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
}
.qode_call_to_action.container .container_inner {
padding: 40px 0;
}
.call_to_action_text_wrapper p {
font-size: 19px;
font-weight: 300;
line-height: 1.692307692307692em;
color: #fff;
text-align: center;
}
.qode_call_to_action .call_to_action_text_wrapper {
line-height: 40px;
}
.qode_call_to_action .qbutton{
position: static;
}
.call_to_action_button_wrapper {
text-align: left;
}
.call_to_action_button_wrapper.left {
text-align: left;
}
.qode_call_to_action .two_columns_75_25>.column2.left>.column_inner {
padding: 0 20px 0 0;
}
.qode_call_to_action.in_grid .two_columns_75_25>.column2.left>.column_inner {
padding-left: 28px;
}
.qode_call_to_action.in_grid .two_columns_75_25>.column2>.column_inner {
padding-right: 28px;
}
.qode_call_to_action.in_grid .two_columns_75_25>.column1.left>.column_inner {
padding-right: 28px;
}
.qode_call_to_action.in_grid .two_columns_75_25>.column1>.column_inner {
padding-left: 28px;
}
.qode_call_to_action .two_columns_75_25>.column1.left>.column_inner {
padding: 0;
}
.qode_call_to_action .two_columns_75_25>.column1.left {
text-align: right;
}
/* ==========================================================================
* Bootstrap v3.0.0
*
* Copyright 2013 Twitter, Inc
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Designed and built with all the love in the world by @mdo and @fat.
* normalize.css v2.1.0 | MIT License | git.io/normalize
========================================================================== */
.carousel {
position: relative;
}
.carousel-inner {
position: relative;
width: 100%;
overflow: hidden;
}
.boxed .carousel-inner{
width: 1150px;
left: auto !important;
}
.carousel-inner .video{
position: static;
left: 0;
direction: ltr;
}
.carousel-inner > .item {
position: relative;
display: none;
-webkit-transition: 0.6s ease-in-out left;
transition: 0.6s ease-in-out left;
}
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
display: block;
height: auto;
max-width: 100%;
line-height: 1;
}
.carousel-inner > .active,
.carousel-inner > .next,
.carousel-inner > .prev {
display: block;
}
.carousel-inner > .active {
left: 0;
}
.carousel-inner > .next,
.carousel-inner > .prev {
position: absolute;
top: 0;
width: 100%;
}
.carousel-inner > .next {
left: 100%;
}
.carousel-inner > .prev {
left: -100%;
}
.carousel-inner > .next.left,
.carousel-inner > .prev.right {
left: 0;
}
.carousel-inner > .active.left {
left: -100%;
}
.carousel-inner > .active.right {
left: 100%;
}
/* part for fading adnimation - start */
.carousel.fade .item {
-webkit-transition: opacity 0.5s ease-in-out;
-moz-transition: opacity 0.5s ease-in-out;
-ms-transition: opacity 0.5s ease-in-out;
-o-transition: opacity 0.5s ease-in-out;
transition: opacity 0.5s ease-in-out;
opacity: 1;
filter: alpha(opacity=100);
}
.carousel.fade .active.left,
.carousel.fade .active.right {
opacity: 0;
filter: alpha(opacity=0);
}
.carousel.fade .active.item {
opacity: 1;
filter: alpha(opacity=100);
}
.carousel.fade .active.left,
.carousel.fade .active.right {
left: 0;
z-index: 2;
opacity: 0;
filter: alpha(opacity=0);
}
.carousel.fade .next,
.carousel.fade .prev {
left: 0;
z-index: 1;
}
/* part for fading adnimation - end */
.carousel-indicators {
position: absolute;
bottom: 20px;
left: 50%;
z-index: 15;
width: 60%;
padding-left: 0;
margin-left: -30%;
text-align: center;
list-style: none;
}
.carousel-indicators li {
display: inline-block;
width: 8px;
height: 8px;
margin: 1px;
text-indent: -999px;
cursor: pointer;
border-radius: 10px;
}
.carousel-caption {
position: absolute;
right: 15%;
bottom: 40px;
left: 15%;
z-index: 10;
padding-top: 20px;
padding-bottom: 20px;
color: #fff;
text-align: center;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
}
.carousel-caption .btn {
text-shadow: none;
}
@media screen and (min-width: 768px) {
.carousel-control .icon-prev,
.carousel-control .icon-next {
width: 30px;
height: 30px;
margin-top: -15px;
margin-left: -15px;
font-size: 30px;
}
.carousel-caption {
right: 20%;
left: 20%;
padding-bottom: 30px;
}
}
/* ==== Carousel Custom - Start ==== */
.carousel {
margin-bottom: 0;
}
.carousel.full_screen {
height: 1500px;
}
.qode_slider_preloader{
width: 100%;
background-color: #1c1c1c;
position: absolute;
z-index: 20;
}
.qode_slider_preloader{
height: 1500px;
}
.qode_slider_preloader .ajax_loader{
position: absolute;
}
.carousel-inner .slider_content_outer{
position: relative;
height: 100%;
width: 1100px;
margin: 0px auto;
z-index: 12;
}
.carousel-inner .slider_content {
position: absolute;
width: 100%;
}
.carousel-inner .slider_content .slide_anchor_holder {
margin-top: 8%;
}
.carousel-inner .item.dark .slider_content .text .slide_anchor_holder .slide_anchor_button {
color: #000;
}
.carousel-inner .slider_content .slide_anchor_holder .slide_anchor_button {
font-size: 51px;
color: #fff;
}
.carousel-inner .slider_content .thumb{
opacity: 0;
filter: alpha(opacity = 0);
height: 100%;
display: inline-block;
vertical-align: middle;
}
.carousel-inner .slider_content.left{
text-align: left;
}
.carousel-inner .slider_content.right{
text-align: right;
}
.carousel-inner .slider_content.left .thumb,
.carousel-inner .slider_content.right .thumb{
display: inline-block;
}
.carousel-inner .slider_content.center .thumb{
text-align: center;
}
.carousel-inner .slider_content.center {
text-align: center;
}
/*----- SVG ----- */
.qode_slide-svg-holder svg{
opacity: 0;
height: auto;
}
.item.active .qode_slide-svg-holder svg{
-webkit-animation: fade 0.4s 1 cubic-bezier(0.500, 0.110, 0.805, 0.320);
-moz-animation: fade 0.4s 1 cubic-bezier(0.500, 0.110, 0.805, 0.320);
-o-animation: fade 0.4s 1 cubic-bezier(0.500, 0.110, 0.805, 0.320);
animation: fade 0.4s 1 cubic-bezier(0.500, 0.110, 0.805, 0.320);
opacity: 1;
}
.carousel-inner .active .slider_content .thumb{
-webkit-animation: rotate 1s 1 ease-out;
-moz-animation: rotate 1s 1 ease-out;
-o-animation: rotate 1s 1 ease-out;
animation: rotate 1s 1 ease-out;
opacity: 1;
filter: alpha(opacity = 100);
}
.carousel-inner .active .slider_content .thumb.fade{
-webkit-animation: fade 1s 1 ease-out;
-moz-animation: fade 1s 1 ease-out;
-o-animation: fade 1s 1 ease-out;
animation: fade 1s 1 ease-out;
}
.carousel-inner .slider_content .thumb img{
max-height: 100%;
}
.carousel-inner .slider_content .text{
text-align: center;
opacity: 0;
filter: alpha(opacity = 0);
position: relative;
display: inline-block;
width: 100%;
margin: 10px 0px 10px 0px;
-webkit-transform: translateZ(0px);
-moz-transform: translateZ(0px);
-ms-transform: translateZ(0px);
-o-transform: translateZ(0px);
transform: translateZ(0px);
}
.carousel-inner .active .slider_content .text {
-webkit-animation: text-from-bottom 1.5s 1 cubic-bezier(0.165, 0.840, 0.440, 1.000);
-moz-animation: text-from-bottom 1.5s 1 cubic-bezier(0.165, 0.840, 0.440, 1.000);
-o-animation: text-from-bottom 1.5s 1 cubic-bezier(0.165, 0.840, 0.440, 1.000);
animation: text-from-bottom 1.5s 1 cubic-bezier(0.165, 0.840, 0.440, 1.000);
opacity: 1;
filter: alpha(opacity = 100);
}
/* one by one element animation - start */
.carousel-inner .slider_content .text.one_by_one{
-webkit-animation: none;
-moz-animation: none;
-o-animation: none;
animation: none;
opacity: 1;
}
.carousel-inner .slider_content .text.one_by_one h2,
.carousel-inner .slider_content .text.one_by_one h4,
.carousel-inner .slider_content .text.one_by_one .separator,
.carousel-inner .slider_content .text.one_by_one p,
.carousel-inner .slider_content .text.one_by_one a.qbutton,
.carousel-inner .slider_content .text.one_by_one .slide_anchor_holder{
opacity: 0;
filter: alpha(opacity = 0);
position: relative;
top: 70px;
}
.carousel-inner .active .slider_content .text.one_by_one h2,
.carousel-inner .active .slider_content .text.one_by_one h4,
.carousel-inner .active .slider_content .text.one_by_one .separator,
.carousel-inner .active .slider_content .text.one_by_one p,
.carousel-inner .active .slider_content .text.one_by_one a.qbutton,
.carousel-inner .active .slider_content .text.one_by_one .slide_anchor_holder{
-webkit-animation: text-from-bottom-one-by-one 1.2s 1 cubic-bezier(0.165, 0.840, 0.440, 1.000) 0s;
-moz-animation: text-from-bottom-one-by-one 1.2s 1 cubic-bezier(0.165, 0.840, 0.440, 1.000) 0s;
-o-animation: text-from-bottom-one-by-one 1.2s 1 cubic-bezier(0.165, 0.840, 0.440, 1.000) 0s;
animation: text-from-bottom-one-by-one 1.2s 1 cubic-bezier(0.165, 0.840, 0.440, 1.000) 0s;
-webkit-animation-fill-mode: both;
-moz-animation-fill-mode: both;
-ms-animation-fill-mode: both;
-o-animation-fill-mode: both;
animation-fill-mode: both;
/*top: 0px;*/
opacity: 1;
filter: alpha(opacity = 100);
}
/* without separator and subtitle above - start */
.carousel-inner .active .slider_content .text.one_by_one.subtitle_above_title.no_separator h2{
animation-delay:0.15s;
-webkit-animation-delay:0.15s;
}
.carousel-inner .active .slider_content .text.one_by_one.subtitle_above_title.no_separator p{
animation-delay:0.3s;
-webkit-animation-delay:0.3s;
}
.carousel-inner .active .slider_content .text.one_by_one.subtitle_above_title.no_separator a.qbutton{
animation-delay:0.45s;
-webkit-animation-delay:0.45s;
}
.carousel-inner .active .slider_content .text.one_by_one.subtitle_above_title.no_separator .slide_anchor_holder {
animation-delay: 0.6s;
-webkit-animation-delay: 0.6s;
}
/* without separator and subtitle above - end */
/* with separator and subtitle above - start */
.carousel-inner .active .slider_content .text.one_by_one.subtitle_above_title.has_separator h2{
animation-delay:0.15s;
-webkit-animation-delay:0.15s;
}
.carousel-inner .active .slider_content .text.one_by_one.subtitle_above_title.has_separator .separator{
animation-delay:0.3s;
-webkit-animation-delay:0.3s;
}
.carousel-inner .active .slider_content .text.one_by_one.subtitle_above_title.has_separator p{
animation-delay:0.45s;
-webkit-animation-delay:0.45s;
}
.carousel-inner .active .slider_content .text.one_by_one.subtitle_above_title.has_separator a.qbutton{
animation-delay:0.6s;
-webkit-animation-delay:0.6s;
}
.carousel-inner .active .slider_content .text.one_by_one.subtitle_above_title.has_separator .slide_anchor_holder {
animation-delay: 0.75s;
-webkit-animation-delay: 0.75s;
}
/* with separator and subtitle above - end */
/* without separator and subtitle bellow - start */
.carousel-inner .active .slider_content .text.one_by_one.subtitle_bellow_title.no_separator h4{
animation-delay:0.15s;
-webkit-animation-delay:0.15s;
}
.carousel-inner .active .slider_content .text.one_by_one.subtitle_bellow_title.no_separator p{
animation-delay:0.3s;
-webkit-animation-delay:0.3s;
}
.carousel-inner .active .slider_content .text.one_by_one.subtitle_bellow_title.no_separator a.qbutton{
animation-delay:0.45s;
-webkit-animation-delay:0.45s;
}
.carousel-inner .active .slider_content .text.one_by_one.subtitle_bellow_title.no_separator .slide_anchor_holder {
animation-delay: 0.6s;
-webkit-animation-delay: 0.6s;
}
/* without separator and subtitle bellow - end */
/* with separator and subtitle bellow - start */
.carousel-inner .active .slider_content .text.one_by_one.subtitle_bellow_title.has_separator h4{
animation-delay:0.15s;
-webkit-animation-delay:0.15s;
}
.carousel-inner .active .slider_content .text.one_by_one.subtitle_bellow_title.has_separator .separator{
animation-delay:0.3s;
-webkit-animation-delay:0.3s;
}
.carousel-inner .active .slider_content .text.one_by_one.subtitle_bellow_title.has_separator p{
animation-delay:0.45s;
-webkit-animation-delay:0.45s;
}
.carousel-inner .active .slider_content .text.one_by_one.subtitle_bellow_title.has_separator a.qbutton{
animation-delay:0.6s;
-webkit-animation-delay:0.6s;
}
.carousel-inner .active .slider_content .text.one_by_one.subtitle_bellow_title.has_separator .slide_anchor_holder {
animation-delay: 0.75s;
-webkit-animation-delay: 0.75s;
}
/* with separator and subtitle bellow - end */
/* without separator and no subtitle - start */
.carousel-inner .active .slider_content .text.one_by_one.no_subtitle.no_separator p{
animation-delay:0.2s;
-webkit-animation-delay:0.2s;
}
.carousel-inner .active .slider_content .text.one_by_one.no_subtitle.no_separator a.qbutton{
animation-delay:0.4s;
-webkit-animation-delay:0.4s;
}
.carousel-inner .active .slider_content .text.one_by_one.no_subtitle.no_separator .slide_anchor_holder {
animation-delay: 0.6s;
-webkit-animation-delay: 0.6s;
}
/* without separator and no subtitle - end */
/* with separator and no subtitle - start */
.carousel-inner .active .slider_content .text.one_by_one.no_subtitle.has_separator .separator{
animation-delay:0.15s;
-webkit-animation-delay:0.15s;
}
.carousel-inner .active .slider_content .text.one_by_one.no_subtitle.has_separator p{
animation-delay:0.3s;
-webkit-animation-delay:0.3s;
}
.carousel-inner .active .slider_content .text.one_by_one.no_subtitle.has_separator a.qbutton{
animation-delay:0.45s;
-webkit-animation-delay:0.45s;
}
.carousel-inner .active .slider_content .text.one_by_one.no_subtitle.has_separator .slide_anchor_holder {
animation-delay: 0.6s;
-webkit-animation-delay: 0.6s;
}
/* with separator and no subtitle - end */
/* one by one element animation - end */
.carousel-inner .slider_content .text .qbutton {
margin: 10px 0px 0px 0px;
}
.carousel-inner .item.dark .slider_content .text .qbutton {
border-color: #303030;
background-color: #303030;
color: #fff;
}
.carousel-inner .item.dark .slider_content .text .qbutton:hover {
background-color: transparent;
color: #303030;
}
.carousel-inner .item.dark .slider_content .text .qbutton.white{
background-color: transparent;
color: #303030;
}
.carousel-inner .item.dark .slider_content .text .qbutton.white:hover{
background-color: #303030;
color: #fff !important;
border-color: #303030;
}
.carousel-inner .slider_content .text .qbutton.white{
margin: 10px 0 0 10px;
}
.carousel-inner h2 {
margin: 10px 0 20px 0;
font-size: 45px;
line-height: 1.071428571428571em; /* 48px / 45px */
}
.carousel-inner h2.with_title_border {
margin: 20px 0 30px 0;
}
.carousel-inner h2.with_title_border span {
display: inline-block;
padding: 0.3em 1.1em;
}
.carousel-inner h2,
.carousel-inner .q_slide_subtitle {
font-weight: 600;
color: #fff;
text-align: center;
padding: 0px;
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.4);
}
.carousel-inner h2.with_background_color span {
padding: 10px;
}
.carousel-inner .q_slide_subtitle {
font-size: 26px;
letter-spacing: 1px;
}
.carousel-inner .q_slide_subtitle span {
font-size: 1em;
margin-bottom: 13px;
display: inline-block;
}
.carousel-inner .q_slide_subtitle.with_background_color span {
padding: 10px;
margin-bottom: 12px;
}
.carousel-inner p {
color: #fff;
text-align: center;
font-size: 21px;
line-height: 1.363157894736842em; /* 29px / 21px */
font-weight: 400;
margin: 10px 0px 15px 0px;
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.4);
}
.carousel-inner .dark h2,
.carousel-inner .dark .q_slide_subtitle,
.carousel-inner .dark p{
color: #000;
}
.carousel-inner .left .text,
.carousel-inner .left h2,
.carousel-inner .left .q_slide_subtitle,
.carousel-inner .left p{
text-align: left;
}
.carousel-inner .right .text,
.carousel-inner .right h2,
.carousel-inner .right .q_slide_subtitle,
.carousel-inner .right p{
text-align: right;
}
.carousel-inner {
left: 0 !important;
position: fixed;
overflow: hidden;
width: 100%;
z-index: 1;
transform: translate(0px, 0px);
-ms-transform: translate(0px, 0px);
-moz-transform: translate(0px, 0px);
-webkit-transform: translate(0px, 0px);
-o-transform: translate(0px, 0px);
-webkit-transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1), margin 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
-moz-transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1), margin 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
-o-transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1), margin 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
-ms-transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1), margin 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
transition: left 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1), margin 0.33s cubic-bezier(0.694, 0.0482, 0.335, 1);
}
.carousel-inner.relative_position{
position: relative;
}
.carousel-inner .item img {
display: inline-block !important;
}
.touch .carousel-inner .item {
background-position: center 0px !important;
}
.carousel-inner .item .image{
position: absolute;
top: 0px;
left: 0px;
background-position: center 0px;
background-repeat: no-repeat;
background-size: cover;
width: 100%;
height: 100%;
}
/* animate image - start */
@media only screen and (min-width: 1000px){
.carousel-inner .item.animate_image.zoom_center .image{
position: absolute;
top: 0%;
left: 0%;
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
width: 100%;
height: 110%;
-webkit-backface-visibility: hidden; /* to prevent glittering on slide change */
backface-visibility: hidden;
}
.carousel-inner .item.animate_image.zoom_top_left .image,
.carousel-inner .item.animate_image.zoom_top_right .image,
.carousel-inner .item.animate_image.zoom_bottom_left .image,
.carousel-inner .item.animate_image.zoom_bottom_right .image{
position: absolute;
top: -12%;
left: -12%;
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
width: 125%;
height: 125%;
-webkit-backface-visibility: hidden; /* to prevent glittering on slide change */
backface-visibility: hidden;
}
}
@media only screen and (max-width: 1000px){
.carousel-inner .item.animate_image.zoom_center .image,
.carousel-inner .item.animate_image.zoom_top_left .image,
.carousel-inner .item.animate_image.zoom_top_right .image,
.carousel-inner .item.animate_image.zoom_bottom_left .image,
.carousel-inner .item.animate_image.zoom_bottom_right .image{
transform: none !important;
-webkit-transform: none !important;
}
}
/* animate image - end */
.carousel-inner .item .image img{
display: none !important;
width: 0px;
height: 0px;
}
.carousel-inner .item .image_pattern {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-position: 0 0;
background-repeat: repeat;
z-index: 2;
}
.carousel-control {
top: 0px;
width: 23%;
color: #303030;
font-size: 13px;
height: 100%;
background: none;
text-shadow: none;
position: absolute;
border-radius: 0;
-webkit-border-radius: 0;
-moz-border-radius: 0;
border: none;
z-index: 2 !important;
margin: 0px;
outline: none;
cursor: pointer;
-webkit-transition: color 0.6s ease-in-out, opacity 0.3s ease-in-out;
-moz-transition: color 0.6s ease-in-out, opacity 0.3s ease-in-out;
-o-transition: color 0.6s ease-in-out, opacity 0.3s ease-in-out;
-ms-transform: color 0.6s ease-in-out, opacity 0.3s ease-in-out;
transition: color 0.6s ease-in-out, opacity 0.3s ease-in-out;
}
.carousel-control.right {
right: 0;
left: auto;
}
.carousel-control:hover{
color: #303030;
opacity: 1 !important;
}
.carousel-control.dark,
.carousel-control.dark:hover{
color: #fff;
}
.carousel-control .prev_nav,
.carousel-control .next_nav{
height: 54px;
width: 54px;
border: 2px solid #fff;
line-height: 54px;
font-size: 14px;
position: absolute;
top: 50%;
margin-top: -27px;
text-align: center;
z-index: 10;
-webkit-transition: opacity 0.3s ease 0s;
-moz-transition: opacity 0.3s ease 0s;
-o-transition: opacity 0.3s ease 0s;
transition: opacity 0.3s ease-in-out;
opacity: 0;
-webkit-border-radius: 56px;
-moz-border-radius: 56px;
-ms-border-radius: 56px;
-o-border-radius: 56px;
border-radius: 56px;
}
@media only screen and (max-width: 1000px){
.carousel-control .prev_nav,
.carousel-control .next_nav {
margin-top: -27px !important;
}
}
.carousel-control i{
font-size:30px;
color: #fff;
line-height: 54px;
}
.carousel-control.dark .prev_nav i,
.carousel-control.dark .next_nav i{
color: #000;
}
.carousel-control.light .prev_nav i,
.carousel-control.light .next_nav i{
color: #fff;
}
.carousel-control.dark .prev_nav,
.carousel-control.dark .next_nav{
border-color: #000;
}
.carousel-control.light .prev_nav,
.carousel-control.light .next_nav{
border-color: #fff;
}
.carousel-control .prev_nav{
left: 23px;
}
.q_slider:hover .carousel-control .prev_nav{
opacity: 1;
}
.carousel-control .next_nav{
right: 23px;
}
.q_slider:hover .carousel-control .next_nav{
opacity: 1;
}
.q_slider:hover .carousel-control .next_nav:hover,
.q_slider:hover .carousel-control .prev_nav:hover{
opacity: 1;
}
.carousel-control .thumb_holder{
width: 150px;
display: block;
position: absolute;
margin: -20px 0px 0px 0px;
top: 50%;
z-index: 9;
}
.carousel-control .thumb_holder .thumb_top{
background-color: #fff;
display: block;
position: relative;
}
.carousel-control.dark .thumb_holder .thumb_top{
background-color: #000;
}
.carousel-control.left .thumb_holder .thumb_top{
-webkit-border-radius:0px 3px 0px 0px;
-moz-border-radius:0px 3px 0px 0px;
-ms-border-radius: 0px 3px 0px 0px;
border-radius:0px 3px 0px 0px;
}
.carousel-control.right .thumb_holder .thumb_top{
-webkit-border-radius:3px 0px 0px 0px;
-moz-border-radius:3px 0px 0px 0px;
-ms-border-radius: 3px 0px 0px 0px;
border-radius:3px 0px 0px 0px;
}
.carousel-control.left .thumb_holder{
left: -100%;
-webkit-transition: left 0.2s ease-in-out;
-moz-transition: left 0.2s ease-in-out;
-o-transition: left 0.2s ease-in-out;
-ms-transform: left 0.2s ease-in-out;
transition: left 0.2s ease-in-out;
-webkit-border-radius:0px 3px 3px 0px;
-moz-border-radius:0px 3px 3px 0px;
-ms-border-radius: 0px 3px 3px 0px;
border-radius:0px 3px 3px 0px;
display: none;
}
.slider_thumbs .carousel-control.left:hover .thumb_holder{
left: 0px;
}
.in_progress.slider_thumbs .carousel-control.left .thumb_holder{
left: -100% !important;
}
.carousel-control.right .thumb_holder{
right: -100%;
-webkit-transition: right 0.2s ease-in-out;
-moz-transition: right 0.2s ease-in-out;
-o-transition: right 0.2s ease-in-out;
-ms-transform: right 0.2s ease-in-out;
transition: right 0.2s ease-in-out;
-webkit-border-radius:3px 0px 0px 3px;
-moz-border-radius:3px 0px 0px 3px;
-ms-border-radius: 3px 0px 0px 3px;
border-radius:3px 0px 0px 3px;
display: none;
}
.slider_thumbs .carousel-control.right:hover .thumb_holder{
right: 0px;
}
.in_progress.slider_thumbs .carousel-control.right .thumb_holder{
right: -100% !important;
}
.carousel-control.left .arrow_left{
float: left;
height: 40px;
line-height: 40px;
padding: 0px 0px 0px 15px;
}
.carousel-control.left .numbers{
float: right;
height: 40px;
line-height: 40px;
padding: 0px 20px 0px 0px;
}
.carousel-control.right .arrow_right{
float: right;
height: 40px;
line-height: 40px;
padding: 0px 15px 0px 0px;
}
.carousel-control.right .numbers{
float: left;
height: 40px;
line-height: 40px;
padding: 0px 0px 0px 20px;
}
.carousel-control .img_outer{
top: 0px;
clear: both;
width: 150px;
height: 47px;
position: relative;
display: block;
overflow: hidden;
margin: 0px 0px -2px 0px;
}
.carousel-control .img{
top: -47px;
width: 150px;
height: 47px;
position: relative;
display: block;
overflow: hidden;
}
.in_progress .carousel-control:hover .img{
top: -47px !important;
}
.carousel-control:hover .img{
top: 0px;
-webkit-transition: top 0.2s ease-in-out 0.2s;
-moz-transition: top 0.2s ease-in-out 0.2s;
-o-transition: top 0.2s ease-in-out 0.2s;
-ms-transform: top 0.2s ease-in-out 0.2s;
transition: top 0.2s ease-in-out 0.2s;
}
.carousel-control.right .img{
float: right;
}
.carousel-control .img img,
.carousel-control .img .video{
position: absolute;
top: 0px;
left: 0px;
z-index: 2;
}
.carousel-control .img .video{
left: -1px;
}
.carousel-control .img .old{
z-index: 1;
}
@media only screen and (max-width: 1300px){
.carousel-control {
width: 15%;
}
}
@media only screen and (max-width: 1000px){
.carousel-control{
width: 10%;
}
.carousel-control .prev_nav{
left: 0px;
opacity: 1;
}
.carousel-control.left .thumb_holder{
display: none;
}
.carousel-control .next_nav{
right: 0px;
opacity: 1;
}
.carousel-control.right .thumb_holder{
display: none;
}
}
.touch .carousel-control{
width: 10%;
}
.touch .carousel-control.left{
background-position: 30px center !important;
}
.touch .carousel-control.left .thumb_holder{
display: none;
}
.touch .carousel-control.right{
background-position: 100% center !important;
}
.touch .carousel-control.right .thumb_holder{
display: none;
}
/* old way responsiveness - start */
@media (max-width: 1200px) {
.carousel:not(.advanced_responsiveness) .carousel-inner h2 {
margin-top: 0;
}
.carousel:not(.advanced_responsiveness) .carousel-inner h2 span {
font-size: 0.625em !important;
line-height: 1.4em !important;
}
.carousel:not(.advanced_responsiveness) .carousel-inner .q_slide_subtitle span {
font-size: 0.8em;
}
.carousel:not(.advanced_responsiveness) .carousel-inner h2 {
line-height: inherit !important;
}
}
@media (max-width: 1024px) {
.carousel:not(.advanced_responsiveness) .carousel-inner{
position: relative;
}
.carousel:not(.advanced_responsiveness) .carousel-inner .qbutton {
font-size: 12px;
line-height: 31px;
height: 31px;
}
.carousel:not(.advanced_responsiveness) .carousel-inner .qbutton i{
margin: 0px 0px 0px 20px;
}
}
@media only screen and (max-height: 850px){
.full_screen:not(.advanced_responsiveness) .carousel-inner .slider_content{
height: 35%;
}
}
@media only screen and (max-width: 800px) {
.carousel:not(.advanced_responsiveness) .carousel .carousel-inner .slider_content_outer {
display: table;
}
.carousel:not(.advanced_responsiveness) .carousel-inner .slider_content .thumb {
height: auto;
}
.carousel:not(.advanced_responsiveness) .carousel .carousel-inner .slider_content {
display: table-cell;
vertical-align: middle;
position: static;
top: 0 !important;
left: 0 !important;
}
.carousel:not(.advanced_responsiveness) .carousel-inner h2.large span {
font-size: .425em!important;
}
}
@media (max-width: 768px) {
.carousel:not(.advanced_responsiveness) .carousel-inner .qbutton {
font-size: 11px;
line-height: 27px;
height: 27px;
}
.carousel:not(.advanced_responsiveness) .carousel-inner .qbutton i {
margin: 0px 0px 0px 17px;
}
.carousel:not(.advanced_responsiveness) .carousel-inner h2.with_title_border span {
padding: .3em 0.8em;
}
.carousel:not(.advanced_responsiveness) .carousel-control.left {
left: 0;
}
.carousel:not(.advanced_responsiveness) .carousel-control.right {
right: 0;
}
}
@media only screen and (max-height: 600px){
.full_screen:not(.advanced_responsiveness) .carousel-inner .slider_content{
height: 25%;
}
}
@media (max-width: 567px) {
.carousel:not(.advanced_responsiveness) .carousel-inner .qbutton{
font-size: 10px;
line-height: 23px;
height: 23px;
}
.carousel:not(.advanced_responsiveness) .carousel-inner .qbutton i{
margin: 0px 0px 0px 14px;
}
.carousel:not(.advanced_responsiveness) .carousel-inner p {
line-height: 1.4em !important;
}
.carousel:not(.advanced_responsiveness) .carousel-control {
display: none;
}
.carousel:not(.advanced_responsiveness) .carousel-inner h2.large span {
font-size: .38em !important;
}
.carousel:not(.advanced_responsiveness) .carousel-inner h2 span {
font-size: .525em !important;
}
}
@media (max-width: 480px) {
.carousel:not(.advanced_responsiveness) .carousel-inner h2.large span {
font-size: .3em !important;
}
}
@media (max-width: 320px) {
.carousel:not(.advanced_responsiveness) .carousel-inner h2.large span {
font-size: 0.2em !important;
}
.carousel:not(.advanced_responsiveness) .carousel-inner h2 span {
font-size: 0.4em !important;
line-height: 1em !important;
}
.carousel:not(.advanced_responsiveness) .carousel-inner p span {
font-size: 60% !important;
}
.carousel:not(.advanced_responsiveness) .carousel-inner p {
line-height: 1em !important;
}
.carousel:not(.advanced_responsiveness) .carousel-inner .qbutton{
font-size: 9px;
line-height: 20px;
height: 20px;
}
.carousel:not(.advanced_responsiveness) .carousel-inner .qbutton i{
margin: 0px 0px 0px 10px;
}
.carousel:not(.advanced_responsiveness) .carousel-inner h2.with_title_border {
margin: 0 0 10px;
}
}
/* old way responsiveness - end */
/* advanced responsiveness - start */
@media (max-width: 1200px) {
.carousel.advanced_responsiveness .carousel-inner h2 {
margin-top: 0;
}
}
@media (max-width: 1000px) {
.carousel.advanced_responsiveness .carousel-inner{
position: relative;
}
.carousel.advanced_responsiveness .carousel-inner > .item {
padding-top: 0px !important;
}
.carousel.advanced_responsiveness .carousel-control .prev_nav,
.carousel.advanced_responsiveness .carousel-control .next_nav{
margin-top: 0px !important;
}
.carousel.advanced_responsiveness .carousel .carousel-inner .slider_content_outer {
display: table;
box-sizing: border-box;
display: table;
padding: 0 5px;
}
.carousel.advanced_responsiveness .carousel .carousel-inner .slider_content .thumb {
height: auto;
}
.carousel.advanced_responsiveness .carousel .carousel-inner .slider_content {
display: table-cell;
vertical-align: middle;
position: static;
top: 0 !important;
left: 0 !important;
}
.carousel.advanced_responsiveness .carousel .carousel-inner .graphic_content{
text-align: center;
}
}
@media (max-width: 567px) {
.carousel.advanced_responsiveness .carousel-control {
display: none;
}
}
@media (max-width: 350px) {
.carousel.advanced_responsiveness .carousel .carousel-inner .slider_content_outer {
width: 100% !important;
}
}
/* advanced responsiveness - end */
.carousel-indicators li{
background-color: #fff;
opacity: 0.4;
margin: 0px 3px;
-webkit-transition: all 0.6s ease-in-out;
-moz-transition: all 0.6s ease-in-out;
-o-transition: all 0.6s ease-in-out;
-ms-transform: all 0.6s ease-in-out;
transition: all 0.6s ease-in-out;
}
.carousel-indicators.dark li{
background-color: #000;
}
.carousel-indicators .active{
opacity: 1;
margin: 0px 3px;
}
@-webkit-keyframes text-from-bottom {
0% {
-webkit-transform: translate(0, 15%);
opacity: 0;
}
50% {
-webkit-transform: translate(0, 15%);
opacity: 0;
}
100% {
-webkit-transform: translate(0, 0);
opacity: 1;
}
}
@-moz-keyframes text-from-bottom {
0% {
-moz-transform: translate(0, 15%);
opacity: 0;
}
50% {
-moz-transform: translate(0, 15%);
opacity: 0;
}
100% {
-moz-transform: translate(0, 0);
opacity: 1;
}
}
@-o-keyframes text-from-bottom {
0% {
-o-transform: translate(0, 15%);
opacity: 0;
}
50% {
-o-transform: translate(0, 15%);
opacity: 0;
}
100% {
-o-transform: translate(0, 0);
opacity: 1;
}
}
@keyframes text-from-bottom {
0% {
transform: translate(0, 15%);
opacity: 0;
}
50% {
transform: translate(0, 15%);
opacity: 0;
}
100% {
transform: translate(0, 0);
opacity: 1;
}
}
@-webkit-keyframes rotate {
0% {
-webkit-transform: perspective(600px) rotateX(90deg) scale(.5);
opacity: 0;
}
50% {
-webkit-transform: perspective(600px) rotateX(90deg) scale(.5);
opacity: 0;
}
100% {
-webkit-transform: perspective(600px) rotateX(0deg) scale(1);
opacity: 1;
}
}
@-moz-keyframes rotate {
0% {
-moz-transform: perspective(600px) rotateX(90deg) scale(.5);
opacity: 0;
}
50% {
-moz-transform: perspective(600px) rotateX(90deg) scale(.5);
opacity: 0;
}
100% {
-moz-transform: perspective(600px) rotateX(0deg) scale(1);
opacity: 1;
}
}
@-o-keyframes rotate {
0% {
-o-transform: perspective(600px) rotateX(90deg) scale(.5);
opacity: 0.2;
}
50% {
-o-transform: perspective(600px) rotateX(90deg) scale(.5);
opacity: 0.2;
}
100% {
-o-transform: perspective(600px) rotateX(0deg) scale(1);
opacity: 1;
}
}
@keyframes rotate {
0% {
transform: perspective(600px) rotateX(90deg) scale(.5);
opacity: 0;
}
50% {
transform: perspective(600px) rotateX(90deg) scale(.5);
opacity: 0;
}
100% {
transform: perspective(600px) rotateX(0deg) scale(1);
opacity: 1;
}
}
@-webkit-keyframes fade {
0% {
opacity: 0;
}
50% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@-moz-keyframes fade {
0% {
opacity: 0;
}
50% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@-o-keyframes fade {
0% {
opacity: 0;
}
50% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes fade {
0% {
opacity: 0;
}
50% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@-webkit-keyframes text-from-bottom-one-by-one {
0% {
top: 70px;
opacity: 0;
}
50% {
top: 45px;
opacity: 0;
}
100% {
top: 0px;
opacity: 1;
}
}
@-moz-keyframes text-from-bottom-one-by-one {
0% {
top: 70px;
opacity: 0;
}
50% {
top: 45px;
opacity: 0;
}
100% {
top: 0px;
opacity: 1;
}
}
@-o-keyframes text-from-bottom-one-by-one {
0% {
top: 70px;
opacity: 0;
}
50% {
top: 45px;
opacity: 0;
}
100% {
top: 0px;
opacity: 1;
}
}
@keyframes text-from-bottom-one-by-one {
0% {
top: 70px;
opacity: 0;
}
50% {
top: 45px;
opacity: 0;
}
100% {
top: 0px;
opacity: 1;
}
}
.carousel .video .mobile-video-image {
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
display: none;
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
z-index: 10;
}
.carousel .video .video-overlay {
height: 3000px;
left: 0;
opacity: 0;
position: absolute;
top: 0;
width: 100%;
z-index: 11;
}
.carousel .video .video-overlay.active {
background-image: url("img/pixel-video.png");
background-position: 0px 0px;
background-repeat: repeat;
opacity: 1;
}
.carousel .video .video-overlay img{
display: none !important;
}
.carousel .video .video-wrap {
top: 0px;
left: 0px;
overflow: hidden;
position: absolute;
width: 100%;
z-index: 10;
}
.carousel .video .video-wrap .mejs-poster {
background-size: cover !important;
-moz-background-size: cover !important;
-webkit-background-size: cover !important;
-o-background-size: cover !important;
}
.carousel .video .video-wrap .mejs-container .mejs-controls {
display: none !important;
}
.carousel .video .video-wrap .mejs-controls .mejs-button button:focus {
outline: none !important;
}
.carousel .video .video-wrap .mejs-controls .mejs-time-rail .mejs-time-loaded {
background-color: rgba(255, 255, 255, 0.18) !important;
}
.carousel .video .video-wrap .mejs-container {
background-color: transparent !important;
background-image: none !important;
height: auto !important;
}
.carousel .video .video-wrap .mejs-mediaelement{
background: none !important;
border: 0px !important;
}
.carousel .video .video-wrap .mejs-container .mejs-poster img {
max-width: none !important;
width: 100% !important;
}
.carousel .video .video-wrap .mejs-controls button { opacity: 0.8; }
.carousel .video .video-wrap .mejs-controls button:hover, .mejs-controls .mejs-fullscreen-button:hover button { opacity: 1!important;}
.carousel .video .video-wrap .mejs-controls .mejs-time-rail .mejs-time-total {
background: #1f1f1f none repeat scroll 0 0 !important;
}
.carousel .video .video-wrap .mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current {
background: transparent !important;
}
.carousel .item .text .separator {
margin-top: 40px;
margin-bottom: 40px;
width: 68%;
}
.carousel .item .left .text .separator{
margin-left: 0;
}
.carousel .item .right .text .separator{
margin-right: 0;
}
/*** Custom cursor for slider navigation ***/
.q_slider .has_custom_cursor .prev_nav,
.q_slider .has_custom_cursor .next_nav,
.no-touch .q_slider .has_custom_cursor .carousel-indicators{
display:none !important;
}
/*** Custom cursor for slider navigation end ***/
/* ==== Carousel Custom - End ==== */
/* ==== Portfolio Slider, Portfolio Single Slider - Start ==== */
.flex-container a:active, .flexslider a:active, .flex-container a:focus, .flexslider a:focus,
.portfolio_slider .flex-container a:active, .portfolio_slider .flexslider a:active, .portfolio_slider .flex-container a:focus, .portfolio_slider .flexslider a:focus,
.qode_carousels .flex-container a:active, .qode_carousels a:active, .qode_carousels .flex-container a:focus, .qode_carousels a:focus{
outline: 0;
}
.portfolio_slides,
.slides,
.flex-control-nav,
.flex-direction-nav,
.caroufredsel-direction-nav
{
margin: 0;
padding: 0;
list-style: none;
}
.flexslider .slides>li{
background-color: transparent;
display: none;
position: relative;
margin: 0;
}
.caroufredsel_wrapper {
cursor: grab!important;
cursor: -moz-grab!important;
cursor: -webkit-grab!important;
margin: 0px!important;
}
.portfolio_slider .portfolio_slides,
.qode_carousels .slides{
opacity: 0;
}
.portfolio_slider .portfolio_slides>li,
.qode_carousels .slides>li{
background-color: transparent;
position: relative;
margin: 0;
float: left;
}
.qode_carousels .slides>li{
margin: 0 2px 0 0;
}
.flexslider .slides img,
.portfolio_slider .portfolio_slides img,
.qode_carousels .slides img{
width: 100%;
display: block;
}
.gallery_frame{
width: 100%;
height:100%;
position: absolute;
top: 0;
text-align: center;
}
.wpb_flexslider.flexslider.have_frame{
width: 645px;
margin: 0 auto;
overflow: visible;
}
.frame_holder > .wpb_wrapper {
padding: 34px 0 102px 0;
position: relative;
}
.frame_holder.frame_holder2 > .wpb_wrapper{
padding: 48px 0 75px 0;
}
.slides:after,
.portfolio_slides:after{
content: ".";
display: block;
clear: both;
visibility: hidden;
line-height: 0;
height: 0;
}
html[xmlns] .slides,
html[xmlns] .portfolio_slides{
display: block;
}
* html .slides,
* html .portfolio_slides{
height: 1%;
}
.no-js .slides>li:first-child,
.no-js .portfolio_slides>li:first-child{
display: block;
}
.flexslider,
.portfolio_slider {
margin: 0 0 60px;
position: relative;
zoom: 1;
}
.wpb_flexslider.flexslider{
overflow:hidden;
}
.portfolio_slider {
margin: 0;
width: 100.2%;
}
.boxed .portfolio_slider{
margin: 0 -25px 60px;
overflow: hidden;
}
.flex-viewport,
.portfolio_slider .flex-viewport{
max-height: 2000px;
-webkit-transition: all 1s ease;
-moz-transition: all 1s ease;
transition: all 1s ease;
}
.loading .flex-viewport{
max-height: 300px;
}
.flexslider .slides,
.portfolio_slider .portfolio_slides,
.qode_carousels .slides{
zoom: 1;
}
.flexslider ul{
padding:0;
}
.portfolio_slider .flex-direction-nav,
.flexslider .flex-direction-nav{
*height: 0;
}
.flex-direction-nav a,
.caroufredsel-direction-nav a
{
width: 42px;
height: 42px;
line-height: 42px;
margin: -23px 0 0;
display: block;
position: absolute;
top: 50%;
z-index: 10;
cursor: pointer;
text-align: center;
-webkit-transition: all .3s ease 0s;
-moz-transition: all .3s ease 0s;
-o-transition: all .3s ease 0s;
color: #8a8a8a;
background-color:transparent;
text-align:center;
z-index: 200;
border:2px solid #fff;
}
.flex-direction-nav a {
-webkit-box-sizing: initial;
-moz-box-sizing: initial;
box-sizing: initial;
}
.flexslider:hover .flex-direction-nav a.flex-prev:hover,
.flexslider:hover .flex-direction-nav a.flex-next:hover,
.portfolio_slider:hover .flex-direction-nav a.flex-prev:hover,
.portfolio_slider:hover .flex-direction-nav a.flex-next:hover,
.portfolio_slider:hover .caroufredsel-direction-nav a.caroufredsel-next:hover,
.portfolio_slider:hover .caroufredsel-direction-nav a.caroufredsel-prev:hover,
.blog_slider:hover .caroufredsel-direction-nav a.caroufredsel-next:hover,
.blog_slider:hover .caroufredsel-direction-nav a.caroufredsel-prev:hover
{
background-color: #fff;
}
.flexslider:hover .flex-direction-nav a.flex-prev:hover i,
.flexslider:hover .flex-direction-nav a.flex-next:hover i,
.portfolio_slider:hover .flex-direction-nav a.flex-prev:hover i,
.portfolio_slider:hover .flex-direction-nav a.flex-next:hover i,
.portfolio_slider:hover .caroufredsel-direction-nav a.caroufredsel-next:hover i,
.portfolio_slider:hover .caroufredsel-direction-nav a.caroufredsel-prev:hover i,
.blog_slider:hover .caroufredsel-direction-nav a.caroufredsel-next:hover i,
.blog_slider:hover .caroufredsel-direction-nav a.caroufredsel-prev:hover i
{
color:#8a8a8a;
}
.flex-direction-nav a i,
.caroufredsel-direction-nav a i
{
line-height: 42px;
color: #fff;
font-size: 22px;
}
.have_frame .flex-direction-nav a i{
display: none;
}
.flexslider .flex-next,
.portfolio_slider .flex-next,
.portfolio_slider .caroufredsel-next
{
right: 15px;
-webkit-border-radius:2em;
-moz-border-radius:2em;
-ms-border-radius: 2em;
border-radius:2em;
}
.have_frame.flexslider .flex-next{
right: -80px;
-webkit-border-radius:0;
-moz-border-radius:0;
-ms-border-radius: 0;
border-radius:0;
background-image: url('img/frame_arrow_right.png');
background-repeat: no-repeat;
background-position: center center;
width: 25px;
height: 67px;
border: none;
}
.have_frame.flexslider .flex-next:hover{
background-color: transparent !important;
background-image: url('img/frame_arrow_right_hover.png');
}
.flexslider .flex-prev,
.portfolio_slider .flex-prev,
.portfolio_slider .caroufredsel-prev
{
left: 15px;
-webkit-border-radius:2em;
-moz-border-radius:2em;
-ms-border-radius: 2em;
border-radius:2em;
}
.have_frame.flexslider .flex-prev{
left: -80px;
-webkit-border-radius:0;
-moz-border-radius:0;
-ms-border-radius: 0;
border-radius:0;
background-image: url('img/frame_arrow_left.png');
background-repeat: no-repeat;
background-position: center center;
width: 25px;
height: 67px;
border: none;
}
.have_frame.flexslider .flex-prev:hover{
background-color: transparent !important;;
background-image: url('img/frame_arrow_left_hover.png');
}
@media only screen and (-webkit-min-device-pixel-ratio:1.5), only screen and (min--moz-device-pixel-ratio:1.5), only screen and (-o-min-device-pixel-ratio:150/100), only screen and (min-device-pixel-ratio:1.5), only screen and (min-resolution:160dpi) {
.have_frame.flexslider .flex-prev{
background-image: url('img/frame_arrow_left@1_5x.png');
-o-background-size: 25px 67px;
-webkit-background-size: 25px 67px;
-moz-background-size: 25px 67px;
background-size: 25px 67px;
}
.have_frame.flexslider .flex-prev:hover{
background-image: url('img/frame_arrow_left_hover@1_5x.png');
}
.have_frame.flexslider .flex-next{
background-image: url('img/frame_arrow_right@1_5x.png');
-o-background-size: 25px 67px;
-webkit-background-size: 25px 67px;
-moz-background-size: 25px 67px;
background-size: 25px 67px;
}
.have_frame.flexslider .flex-next:hover{
background-image: url('img/frame_arrow_right_hover@1_5x.png');
}
}
@media only screen and (-webkit-min-device-pixel-ratio:2.0), only screen and (min--moz-device-pixel-ratio:2.0), only screen and (-o-min-device-pixel-ratio:200/100), only screen and (min-device-pixel-ratio:2.0), only screen and (min-resolution:210dpi) {
.have_frame.flexslider .flex-prev{
background-image: url('img/frame_arrow_left@2x.png');
-o-background-size: 25px 67px;
-webkit-background-size: 25px 67px;
-moz-background-size: 25px 67px;
background-size: 25px 67px;
}
.have_frame.flexslider .flex-prev:hover{
background-image: url('img/frame_arrow_left_hover@2x.png');
}
.have_frame.flexslider .flex-next{
background-image: url('img/frame_arrow_right@2x.png');
-o-background-size: 25px 67px;
-webkit-background-size: 25px 67px;
-moz-background-size: 25px 67px;
background-size: 25px 67px;
}
.have_frame.flexslider .flex-next:hover{
background-image: url('img/frame_arrow_right_hover@2x.png');
}
}
.flex-direction-nav .flex-disabled{
cursor: default;
}
/* ==== Portfolio Slider, Portfolio Single Slider - End ==== */
/* ==== Qode Carousel Slider - Start ==== */
.qode_carousels .slides>li .first_image_holder,
.qode_carousels .slides>li .second_image_holder{
display: block;
position: relative;
width: 100%;
opacity: 1;
-webkit-transition: opacity 0.4s ease-in-out;
-ms-transition: opacity 0.4s ease-in-out;
-moz-transition: opacity 0.4s ease-in-out;
-o-transition: opacity 0.4s ease-in-out;
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
}
.qode_carousels .slides>li .second_image_holder{
position: absolute;
top: 0;
left: 0;
}
.qode_carousels .slides>li .second_image_holder,
.qode_carousels .slides > li .carousel_item_holder:hover .first_image_holder.has_hover_image{
opacity: 0;
}
.qode_carousels .slides > li .carousel_item_holder:hover .second_image_holder.has_hover_image{
opacity: 1;
}
.qode_carousels{
padding: 0;
position: relative;
display: block;
zoom: 1;
}
.qode_carousels_holder.two_rows .slides > li .carousel_item_holder {
margin-bottom: 15px;
position: relative;
}
.qode_carousels .flex-direction-nav {
height: 0;
display: none !important;
}
/* Control Nav */
.qode_carousels .flex-control-nav{
width: 100%;
text-align: center;
position: absolute;
bottom: -60px;
}
.qode_carousels .flex-control-nav li{
margin: 0 3px;
display: inline-block;
zoom: 1;
display: inline;
}
.qode_carousels .flex-control-paging li a{
width: 9px;
height: 9px;
display: inline-block;
border: 1px solid #eaeaea;
background-color: #fff;
cursor: pointer;
text-indent: -9999px;
-webkit-border-radius: 20px;
-moz-border-radius: 20px;
-o-border-radius: 20px;
border-radius: 20px;
}
.qode_carousels .flex-control-paging li a.flex-active{
background-color: #1abc9c;
cursor: default;
border: none;
}
.qode_carousels.gray .flex-control-paging li a.flex-active {
cursor: default;
}
/* ==== Qode Carousel Slider - End ==== */
.wpb_row, .wpb_content_element,
ul.wpb_thumbnails-fluid > li,
.last_toggle_el_margin, .wpb_button {
margin-bottom: 0 !important;
}
/* ==========================================================================
Clients styles
========================================================================== */
.qode_clients .qode_client_holder {
float: left;
text-align: center;
margin-bottom: 35px;
}
.qode_clients.two_columns .qode_client_holder {
width: 50%;
}
.qode_clients.three_columns .qode_client_holder {
width: 33.33%;
}
.qode_clients.four_columns .qode_client_holder {
width: 25%;
}
.qode_clients.five_columns .qode_client_holder {
width: 20%;
}
.qode_clients.six_columns .qode_client_holder {
width: 16.66666666666667%;
}
.qode_clients .qode_client_holder_inner {
position: relative;
margin: 0 20px;
}
.qode_clients .qode_client_holder_inner:before,
.qode_clients .qode_client_holder_inner:after {
display: block;
content: "";
position: absolute;
}
.qode_clients .qode_client_holder_inner:before {
height: 100%;
right: -20px;
width: 1px;
border-right: 1px solid #eaeaea;
}
.qode_clients .qode_client_holder_inner:after {
width: 100%;
bottom: -20px;
height: 1px;
border-bottom: 1px solid #eaeaea;
}
.qode_clients .qode_client_holder.border-bottom-none .qode_client_holder_inner:after {
border-bottom: 0;
}
.qode_clients.two_columns .qode_client_holder:nth-child(2n) .qode_client_holder_inner:before,
.qode_clients.three_columns .qode_client_holder:nth-child(3n) .qode_client_holder_inner:before,
.qode_clients.four_columns .qode_client_holder:nth-child(4n) .qode_client_holder_inner:before,
.qode_clients.five_columns .qode_client_holder:nth-child(5n) .qode_client_holder_inner:before,
.qode_clients.six_columns .qode_client_holder:nth-child(6n) .qode_client_holder_inner:before {
border-right-width: 0;
}
.qode_clients .qode_client_holder a {
display: inline-block;
vertical-align: middle;
max-width: 100%;
line-height: 0;
-webkit-transition: opacity 0.6s ease-out;
-moz-transition: opacity 0.6s ease-out;
-o-transition: opacity 0.6s ease-out;
-ms-transform: opacity 0.6s ease-out;
transition: opacity 0.6s ease-out;
}
.qode_clients .qode_client_holder a:hover {
opacity: 0.4;
}
/* ==========================================================================
Animated icon with text styles
========================================================================== */
.animated_icons_with_text .animated_icon_with_text_holder {
float: left;
text-align: center;
}
.animated_icons_with_text.two_columns .animated_icon_with_text_holder {
width: 50%;
}
.animated_icons_with_text.three_columns .animated_icon_with_text_holder {
width: 33.33%;
}
.animated_icons_with_text.four_columns .animated_icon_with_text_holder {
width: 25%;
}
.animated_icons_with_text.five_columns .animated_icon_with_text_holder {
width: 20%;
}
.animated_icons_with_text.six_columns .animated_icon_with_text_holder {
width: 16.66666666666667%;
}
.animated_icons_with_text .animated_icon_with_text_inner {
position: relative;
padding: 0px 20px;
height: 85px;
}
.animated_icons_with_text .animated_icon_with_text_inner:before,
.animated_icons_with_text .animated_icon_with_text_inner:after {
display: block;
content: "";
position: absolute;
}
.animated_icons_with_text .animated_icon_with_text_inner:before {
height: 100%;
right: 0px;
width: 1px;
border-right: 1px solid #f5f5f5;
}
.animated_icons_with_text .animated_icon_with_text_inner:after {
width: 100%;
bottom: 0px;
height: 1px;
border-bottom: 1px solid #f5f5f5;
}
.animated_icons_with_text .animated_icon_with_text_holder.border-bottom-none .animated_icon_with_text_inner:after {
border-bottom: none;
}
.animated_icons_with_text.two_columns .animated_icon_with_text_holder:nth-child(2n) .animated_icon_with_text_inner:before,
.animated_icons_with_text.three_columns .animated_icon_with_text_holder:nth-child(3n) .animated_icon_with_text_inner:before,
.animated_icons_with_text.four_columns .animated_icon_with_text_holder:nth-child(4n) .animated_icon_with_text_inner:before,
.animated_icons_with_text.five_columns .animated_icon_with_text_holder:nth-child(5n) .animated_icon_with_text_inner:before,
.animated_icons_with_text.six_columns .animated_icon_with_text_holder:nth-child(6n) .animated_icon_with_text_inner:before {
border-right-width: 0;
}
.animated_icon_holder{
height: 100%;
padding:0 0 0 15px;
display: block;
width: 81px;
float: left;
position: relative;
}
.animated_icon{
height: 100%;
width: 100%;
position: relative;
}
.animated_icon_inner span{
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
backface-visibility: hidden;
backface-visibility: hidden;
left: 0px;
position: absolute;
top: 0;
-webkit-transition: 200ms ease-in;
-moz-transition: 200ms ease-in;
-o-transition: 200ms ease-in;
transition: 200ms ease-in;
}
.animated_icon_inner span.animated_icon_back{
-webkit-transform: rotateY(-180deg);
-moz-transform: rotateY(-180deg);
-ms-transform: rotateY(-180deg);
-o-transform: rotateY(-180deg);
transform: rotateY(-180deg);
}
.animated_icon_with_text_holder:hover .animated_icon_inner span.animated_icon_back{
-webkit-transform: rotateY(0);
-moz-transform: rotateY(0);
-ms-transform: rotateY(0);
-o-transform: rotateY(0);
transform: rotateY(0);
}
.animated_icon_with_text_holder:hover .animated_icon_inner span {
-webkit-transform: rotateY(180deg);
-moz-transform: rotateY(180deg);
-ms-transform: rotateY(180deg);
-o-transform: rotateY(180deg);
transform: rotateY(180deg);
}
.animated_icon_inner{
height: 81px;
width: 100%;
position: absolute;
left:0px;
top: 50%;
margin: -41px 0 0 0;
}
.animated_icon_inner i {
width: 77px;
height: 77px;
line-height: 77px;
background: transparent;
-o-border-radius: 100px;
-moz-border-radius: 100px;
-webkit-border-radius: 100px;
border-radius: 100px;
margin: 0;
border: 2px solid #c0c0c0;
color: #c0c0c0;
font-size:35px;
}
.animated_icon_inner span.animated_icon_back i{
background-color: #1abc9c;
color:#fff;
border-color: #1abc9c;
}
.animated_icon_with_text_holder .animated_text_holder {
text-align: left;
width: 100%;
height: 100%;
}
.animated_icon_with_text_holder .animated_text_holder_wrap{
display: block;
padding: 0 0 0 116px;
height: 100%;
}
.animated_icon_with_text_holder .animated_text_holder_wrap_inner{
width: 100%;
height: 100%;
position: relative;
}
.animated_text_holder_inner{
position: absolute;
left: 0;
width: 100%;
top: 0;
overflow: hidden;
height: 100%;
}
.animated_icon_with_text_holder .animated_title,
.animated_icon_with_text_holder .animated_text{
display: table;
position: absolute;
overflow: hidden;
width: 100%;
height: 100%;
}
.animated_icon_with_text_holder .animated_title_inner,
.animated_icon_with_text_holder .animated_text p{
display: table-cell;
vertical-align: middle;
}
.animated_icon_with_text_holder .animated_title,
.animated_icon_with_text_holder .animated_title_inner,
.animated_icon_with_text_holder .animated_text,
.animated_icon_with_text_holder .animated_text p{
-webkit-transition: 200ms ease-in;
-moz-transition: 200ms ease-in;
-o-transition: 200ms ease-in;
transition: 200ms ease-in;
}
.animated_icon_with_text_holder .animated_text {
-webkit-transform: translateY(-100%);
-moz-transform: translateY(-100%);
-ms-transform: translateY(-100%);
-o-transform: translateY(-100%);
transform: translateY(-100%);
-webkit-transform: translate3d(0, -100%, 0);
-moz-transform: translate3d(0, -100%, 0);
-ms-transform: translate3d(0, -100%, 0);
-o-transform: translate3d(0, -100%, 0);
transform: translate3d(0, -100%, 0);
}
.animated_icon_with_text_holder .animated_text p{
-webkit-transform: translateY(100%);
-moz-transform: translateY(100%);
-ms-transform: translateY(100%);
-o-transform: translateY(100%);
transform: translateY(100%);
-webkit-transform: translate3d(0, 100%, 0);
-moz-transform: translate3d(0, 100%, 0);
-ms-transform: translate3d(0, 100%, 0);
-o-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
}
.animated_icon_with_text_holder:hover .animated_text,
.animated_icon_with_text_holder:hover .animated_text p{
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
-ms-transform: translateY(0);
-o-transform: translateY(0);
transform: translateY(0);
-webkit-transform: translate3d(0, 0, 0);
-moz-transform: translate3d(0, 0, 0);
-ms-transform: translate3d(0, 0, 0);
-o-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
-webkit-transition: 350ms ease-out;
-moz-transition: 350ms ease-out;
-o-transition: 350ms ease-out;
transition: 350ms ease-out;
}
.animated_icon_with_text_holder:hover .animated_title_inner{
-webkit-transform: translateY(-100%);
-moz-transform: translateY(-100%);
-ms-transform: translateY(-100%);
-o-transform: translateY(-100%);
transform: translateY(-100%);
-webkit-transform: translate3d(0, -100%, 0);
-moz-transform: translate3d(0, -100%, 0);
-ms-transform: translate3d(0, -100%, 0);
-o-transform: translate3d(0, -100%, 0);
transform: translate3d(0, -100%, 0);
-webkit-transition: 350ms ease-out;
-moz-transition: 350ms ease-out;
-o-transition: 350ms ease-out;
transition: 350ms ease-out;
}
.animated_icon_with_text_holder:hover .animated_title{
-webkit-transform: translateY(100%);
-moz-transform: translateY(100%);
-ms-transform: translateY(100%);
-o-transform: translateY(100%);
transform: translateY(100%);
-webkit-transform: translate3d(0, 100%, 0);
-moz-transform: translate3d(0, 100%, 0);
-ms-transform: translate3d(0, 100%, 0);
-o-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
-webkit-transition: 350ms ease-out;
-moz-transition: 350ms ease-out;
-o-transition: 350ms ease-out;
transition: 350ms ease-out;
}
/* ==========================================================================
Service table shorcode start styles
========================================================================== */
.service_table_holder{
display: block;
position: relative;
border-color: #f6f6f6;
border-width: 1px;
border-style: none;
}
.service_table_inner{
display: block;
position: relative;
list-style: none;
margin: 0;
padding: 0;
}
.service_table_inner ul{
padding: 0 !important;
}
.service_table_inner li{
display: block;
margin: 0;
padding: 0;
list-style: none;
text-align: center;
border-bottom: 1px solid #f6f6f6;
}
.service_table_inner > li{
background-color: #fff;
}
.service_table_inner li li{
padding: 9px 20px;
}
.service_table_inner li:last-child{
border-bottom: 0;
}
.service_table_inner li.service_table_title_holder{
display: block;
position: relative;
padding: 31px 20px 20px;
background-color: #fff;
border: none;
}
.service_table_inner li.service_table_title_holder i{
color: #1abc9c;
}
.service_table_title_inner{
position: relative;
display: table;
width: 100%;
height: 100%;
text-align: center;
}
.service_table_title_inner2{
display: table-cell;
width: 100%;
height: 100%;
padding: 20px 20px 25px;
vertical-align: middle;
}
.service_table_inner li.service_table_title_holder.background_image_type{
background-color: transparent !important;
border: 0 !important;
padding: 0;
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
}
.service_table_inner li.service_table_title_holder.background_color_type .service_table_title_inner2{
padding: 0;
}
.service_table_title_holder .service_title{
display: block;
}
.service_table_title_holder i{
display: block;
line-height: 1em;
padding: 33px 0 0;
}
/* ==========================================================================
Service table shorcode end styles
========================================================================== */
/* ==========================================================================
End Clients styles
========================================================================== */
.header_top_bottom_holder{
position: relative;
}
.qode_search_form{
background: none repeat scroll 0 0 #262626;
color: #fff;
margin: 0;
overflow: hidden;
width: 100%;
height: 0px;
position: absolute;
top:0;
left:0;
}
.qode_search_form .qode_icon_in_search {
color: #959595;
font-size: 13px;
display: inline-block;
padding: 0px 0px 0px 45px;
float: left;
line-height: 50px;
}
.qode_search_form input,
.qode_search_form input:focus{
background-color: #262626;
border: medium none;
box-shadow: none;
color: #959595;
display: inline-block;
font-size: 13px;
line-height: 20px;
height: 20px;
margin: 15px 0px;
width: 90%;
padding: 0px 45px 0px 10px;
font-family: inherit;
outline: none;
outline-offset:0px;
-webkit-appearance: none;
border-radius: 0;
float: left;
}
.qode_search_form input:focus{
outline-offset: 0px !important;
}
::-webkit-input-placeholder,
:-moz-placeholder,
::-moz-placeholder,
:-ms-input-placeholder{
color: #959595;
margin: 10px 0px 0px 0px;
}
@media only screen and (max-width: 1200px){
.qode_search_form input{
width: 80%;
}
}
@media only screen and (max-width: 768px){
.qode_search_form input{
width: 70%;
}
}
@media only screen and (max-width: 500px){
.qode_search_form input{
width: 65%;
}
}
.qode_search_form .container_inner{
position: relative;
}
.qode_search_form .container .qode_icon_in_search {
padding: 0px;
}
.qode_search_form .container input{
width: 90%;
padding: 0px 0px 0px 10px;
}
.qode_search_form input[type="submit"] {
border: 0 none;
clip: rect(0px, 0px, 0px, 0px);
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
width: 1px;
visibility: hidden;
}
.qode_search_form .qode_search_close{
color: #959595;
font-size: 13px;
position: absolute;
line-height: 50px;
height: 50px;
top: 0px;
right: 45px;
}
.qode_search_form .container .qode_search_close{
right: 0px;
}
/* slide from header bottom */
.qode_search_form_2{
background: none repeat scroll 0 0 #f1f1f1;
color: #fff;
margin: 0;
overflow: hidden;
width: 100%;
height: 100px;
bottom: 0;
position: absolute;
transition: bottom 0.35s cubic-bezier(.55,.085,.68,.53);
-webkit-transition: bottom 0.35s cubic-bezier(.55,.085,.68,.53);
-moz-transition: bottom 0.35s cubic-bezier(.55,.085,.68,.53);
left:0;
opacity: 1;
}
.qode_search_form_2.animated{
transition: bottom 0.35s cubic-bezier(.55,.085,.68,.53), opacity 0s ease 0s;
-webkit-transition: bottom 0.35s cubic-bezier(.55,.085,.68,.53), opacity 0s ease 0s;
-moz-transition: bottom 0.35s cubic-bezier(.55,.085,.68,.53), opacity 0s ease 0s;
left:0;
opacity: 1;
}
.qode_search_form_2 .container{
z-index:auto;
}
.qode_search_form_2 .form_holder_outer {
display: table;
height: 100px;
width: 100%;
}
.qode_search_form_2 .form_holder {
display: table-cell;
vertical-align: middle;
position:relative;
}
.qode_search_form_2.animated .form_holder_outer {
height: 100px;
}
.qode_search_form_2 .container_inner .form_holder {
padding: 0px;
}
.qode_search_form_2 .form_holder {
padding: 0 45px;
}
.qode_search_form_2 input,
.qode_search_form_2 input:focus{
background-color: transparent;
border: medium none;
box-shadow: none;
color: #9d9d9d;
font-size: 15px;
font-weight: 600;
display: inline-block;
vertical-align: middle;
width: 90%;
padding: 0;
font-family: inherit;
outline: none;
outline-offset:0px;
-webkit-appearance: none;
border-radius: 0;
text-transform: uppercase;
}
.qode_search_form_2 input:focus{
outline-offset: 0px !important;
}
.qode_search_form_2 .qode_search_submit {
width: auto;
cursor: pointer;
font-size:50px;
position:absolute;
right: 45px;
top: 50%;
-moz-transform: translateY(-50%);
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
transition: color 0.4s ease;
-webkit-transition: color 0.4s ease;
-moz-transition: color 0.4s ease;
color: #696969;
padding: 0 0 0 1px;
}
.qode_search_form_2 .container_inner .qode_search_submit {
right:0;
}
.qode_search_form_2 .qode_search_submit:hover{
color:#1abc9c
}
.qode_search_form_2.disabled .qode_search_submit,
.qode_search_form_2.disabled .qode_search_submit:hover {
cursor:default;
color:#959595;
}
/* search covers header */
.qode_search_form_3{
display: none;
color: #fff;
position: absolute;
top: 0;
left: 0;
width: 100%;
z-index: 115;
background:#fff;
}
.admin-bar .qode_search_form_3 {
padding-top: 33px;
}
.qode_search_form_3 .form_holder_outer{
display: table;
width: 100%;
height:100%;
}
.qode_search_form_3 .form_holder{
display: table-cell;
vertical-align: middle;
padding:0px 45px;
position:relative;
}
.qode_search_form_3 .container_inner .form_holder{
padding: 0px;
}
.qode_search_form_3 input,
.qode_search_form_3 input:focus{
background-color: transparent;
border: medium none;
box-shadow: none;
color: #9d9d9d;
font-size: 15px;
font-weight: 600;
display: inline-block;
width: 90%;
padding:0;
font-family: inherit;
outline: none;
outline-offset:0px;
-webkit-appearance: none;
border-radius: 0;
float: left;
text-transform: uppercase;
margin: 0;
}
.qode_search_form_3 input:focus{
outline-offset: 0px !important;
}
.qode_search_form_3 input[type="submit"]{
border: 0 none;
clip: rect(0px,0px,0px,0px);
height: 1px;
margin: -1px;
padding: 0;
position: absolute;
width: 1px;
visibility: hidden;
}
.qode_search_form_3 .qode_search_close{
font-size: 34px;
position: absolute;
right: 45px;
top:50%;
-webkit-transform: translateY(-50%);
-moz-transform: translateY(-50%);
-ms-transform: translateY(-50%);
-o-transform: translateY(-50%);
transform: translateY(-50%);
line-height:1em;
}
.qode_search_form_3 .container_inner .qode_search_close{
right: 0;
}
.qode_search_form_3 .qode_search_close a{
color: #9d9d9d;
display: inline-block;
}
.qode_search_form_3 .qode_search_close a:hover{
color: #1abc9c;
}
::-webkit-input-placeholder,
:-moz-placeholder,
::-moz-placeholder,
:-ms-input-placeholder{
color: #959595;
margin: 10px 0px 0px 0px;
}
.qode_search_form_3 .qode_search_close a i{
vertical-align: top;
}
/* insert end */
/*----------------------FULLSCREEN SEARCH style start--------------------------*/
.side_menu_button{
position:relative;
}
.fullscreen_search_holder{
position:fixed;
top:0;
left:0;
width:100%;
height:100%;
z-index:105;
opacity:0;
}
.fullscreen_search_table{
display: table;
width:100%;
height:100%;
}
.fullscreen_search_cell{
display: table-cell;
vertical-align: middle;
width:100%;
height:100%;
text-align:center;
}
.fullscreen_search_holder .search_label{
font-size:30px;
line-height:1em;
color: #a1a1a1;
vertical-align:bottom;
font-family:inherit;
margin-right:5px;
}
.fullscreen_search_holder .field_holder{
width:30%;
display:inline-block;
vertical-align:bottom;
position:relative;
border-bottom:1px solid #a1a1a1;
}
.fullscreen_search_holder .field_holder .line{
position:absolute;
bottom:-1px;
left:0;
height:1px;
width:0;
background-color: #1abc9c;
-webkit-transition: width 0.4s ease;
transition: width 0.4s ease;
}
.fullscreen_search_holder .search_field{
width:100%;
border-left:none;
border-top:none;
border-right:none;
border-bottom:none;
background:transparent;
outline:none;
height:100%;
font-size:25px;
color: #9d9d9d;
line-height:1em;
position:relative;
font-family: inherit;
}
.fullscreen_search_holder .search_submit{
border:none;
background:transparent;
outline:none;
width: auto;
cursor: pointer;
font-family: 'FontAwesome';
font-size:20px;
line-height:1em;
-webkit-transition: color 0.2s ease;
transition: color 0.2s ease;
color: #a1a1a1;
}
.fullscreen_search_holder .search_submit:hover{
color: #1abc9c;
}
.fullscreen_search_holder .search_close_holder{
float:right;
}
.fullscreen_search_holder .close_container{
position:absolute;
left:0;
top:0;
width:100%;
}
.fullscreen_search_holder .close_container a{
opacity:0;
visibility:hidden;
-webkit-transition: opacity 0.2s ease, color 0.2s ease;
transition: opacity 0.2s ease, color 0.2s ease;
}
.fullscreen_search_holder .close_container a:hover{
color: #1abc9c;
}
.fullscreen_search_holder .close_container .search_close_holder{
margin-right: 45px;
}
.fullscreen_search_holder .close_container .container_inner .search_close_holder{
margin-right: 0px;
}
/*---Fulscreen search FROM CIRCLE style---*/
.fullscreen_search_overlay{
position:absolute;
width:2000px;
height:2000px;
margin-top:-1000px;
margin-left:-1000px;
top:50%;
left:0;
border-radius:100%;
opacity:0;
z-index:99;
-ms-transform-origin: 50%;
-webkit-transform-origin: 50%;
transform-origin: 50%;
-ms-transform: scale(0);
-webkit-transform: scale(0);
-moz-transform: scale(0);
-o-transform: scale(0);
transform: scale(0);
background-color: rgba(255,255,255,0.98);
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
-ms-transition: -ms-transform 0.6s cubic-bezier(0.4,0,0.2,1), opacity 0.6s cubic-bezier(0.4,0,0.2,1);
-webkit-transition: -webkit-transform 0.6s cubic-bezier(0.4,0,0.2,1), opacity 0.6s cubic-bezier(0.4,0,0.2,1);
transition: transform 0.6s cubic-bezier(0.4,0,0.2,1), opacity 0.6s cubic-bezier(0.4,0,0.2,1);
}
.fullscreen_search_overlay.animate{
-ms-transform: scale(3);
-moz-transform: scale(3);
-o-transform: scale(3);
-webkit-transform: scale(3);
transform: scale(3);
opacity:1;
}
.fullscreen_search_holder.from_circle{
-webkit-transition: opacity 0.3s ease;
transition: opacity 0.3s ease;
display:none;
opacity:0;
visibility:visible;
z-index:111;
}
/*---Fulscreen search FADE style---*/
.fullscreen_search_holder.fade{
visibility: hidden;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
opacity: 0;
background-color:rgba(255,255,255,0.98);
z-index:111;
}
.search_fade_out .fullscreen_search_holder.fade{
-webkit-animation: search_fade_out .25s linear both;
animation: search_fade_out .25s linear both ;
}
.search_fade_in .fullscreen_search_holder.fade.animate{
-webkit-animation: search_fade_in .25s linear both;
animation: search_fade_in .25s linear both;
}
.fullscreen_search_holder.fade.animate .fullscreen_search_close{
opacity:1;
visibility:visible;
}
@-webkit-keyframes search_fade_out {
0%{
opacity:1;
visibility: visible;
}
100%{
opacity:0;
visibility: hidden;
}
}
@keyframes search_fade_out{
0%{
opacity:1;
visibility: visible;
}
100% {
opacity:0;
visibility: hidden;
}
}
@-webkit-keyframes search_fade_in {
0% {
opacity:0;
visibility: hidden;
}
100% {
opacity:1;
visibility: visible;
}
}
@keyframes search_fade_in{
0%{
opacity:0;
visibility: hidden;
}
100%{
opacity:1;
visibility: visible;
}
}
/*----------------Search styles end---------------------*/
/****** Cover Boxes start style *******/
.cover_boxes{
position: relative;
overflow: hidden;
}
.cover_boxes ul{
list-style: none;
margin: 0px -20px 0px 0px;
padding: 0px;
width: 200%;
}
.cover_boxes ul li{
float: left;
margin-right: 20px;
overflow: hidden;
position: relative;
width: 265px;
-webkit-transition: all 0.5s ease 0s;
-moz-transition: all 0.5s ease 0s;
-o-transition: all 0.5s ease 0s;
transition: all 0.5s ease 0s;
}
.cover_boxes ul li.act{
width: 530px;
}
.cover_boxes ul li .box{
width: 530px;
}
.cover_boxes ul li .box .thumb {
display: inline-block;
float: left;
margin-right: 20px;
position: relative;
z-index:10;
width: 265px;
}
.cover_boxes ul li .box .thumb img{
display: block;
position: relative;
max-width: 100%;
}
.cover_boxes ul li .box .box_content{
bottom: 0px;
left: 285px;
position: absolute;
padding: 0px 0px 0px 0px;
width: 245px;
z-index:9;
top: 0;
}
.cover_boxes ul li .box h3{
margin: 0px 0px 18px 0px;
}
.cover_boxes ul li .box .qbutton,
.cover_boxes ul li .box h5{
margin: 20px 0px 0px 0px;
}
/********* Cover Boxes end style **********/
/* ==========================================================================
Qode circles styles
========================================================================== */
.q_circles_holder{
position: relative;
display: inline-block;
width: 100%;
clear: both;
list-style: none;
margin: 0;
padding: 0;
}
.q_circles_holder:before{
position: absolute;
left: 80px;
display: block;
width: 85%;
height: 0;
border-top: 1px solid #eaeaea;
content: "";
}
.q_circles_holder.three_columns:before{
top: 115px;
}
.q_circles_holder.four_columns:before{
top: 90px;
}
.q_circles_holder.five_columns:before{
top: 82px;
}
.q_circles_holder.no_line:before{
display: none;
border: 0;
height: 0;
width: 0;
}
.q_circles_holder .q_circle_outer{
position: relative;
float: left;
padding: 0;
margin: 0;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
}
.q_circles_holder.three_columns .q_circle_outer{
width: 33.3%;
}
.q_circles_holder.four_columns .q_circle_outer{
width: 25%;
}
.q_circles_holder.five_columns .q_circle_outer{
width: 20%;
}
.q_circles_holder .q_circle_inner{
position: relative;
display: table;
vertical-align: middle;
text-align: center;
margin: 0 auto;
}
.q_circles_holder.three_columns .q_circle_inner{
width: 230px;
height: 230px;
}
.q_circles_holder.four_columns .q_circle_inner{
width: 180px;
height: 180px;
}
.q_circles_holder.five_columns .q_circle_inner{
width: 161px;
height: 161px;
}
.q_circles_holder.five_columns .q_circle_inner.big_border{
width: 177px;
height: 177px;
}
.q_circles_holder .q_circle_inner2 {
position: relative;
display: table-cell;
width: 100%;
height: 100%;
vertical-align: middle;
text-align: center;
background-color: #e3e3e3;
border: 1px solid #f0f0f0;
border-radius: 1000px;
-webkit-border-radius: 1000px;
-moz-border-radius: 1000px;
-o-border-radius: 1000px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
overflow: hidden;
}
.q_circles_holder .q_circle_inner2 img {
display: block;
width: 100%;
border-radius: 1000px;
-webkit-border-radius: 1000px;
-moz-border-radius: 1000px;
-o-border-radius: 1000px;
}
.q_circles_holder .q_circle_inner2 i,
.q_circles_holder .q_circle_inner2,
.q_circles_holder .q_circle_inner2 .q_text_in_circle {
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
}
.q_circles_holder .q_circle_inner2 i{
color: #b9b9b9;
}
.q_circles_holder .q_circle_inner2:hover {
background-color: #1abc9c !important;
border-color: #1abc9c !important;
}
.q_circles_holder .q_circle_inner2:hover i,
.q_circles_holder .q_circle_inner2:hover .q_text_in_circle{
color: #fff !important;
}
.q_circles_holder .q_circle_text_holder{
display: block;
text-align: center;
margin: 36px 0 0;
padding:0 10px;
}
.q_circles_holder .q_circle_text_holder .q_circle_text{
display: block;
margin: 7px 0 0;
}
/* ==========================================================================
End of Qode circles styles
========================================================================== */
/******** Content Menu - Start ********/
nav.content_menu{
position: relative;
text-align: left;
display: block;
z-index: 1001;
background-color: #ffffff;
-webkit-transform: translateZ(0px);
width: 100%;
-webkit-transition: left .33s cubic-bezier(0.694,0.0482,0.335,1);
-moz-transition: left .33s cubic-bezier(0.694,0.0482,0.335,1);
-o-transition: left .33s cubic-bezier(0.694,0.0482,0.335,1);
-ms-transform: left .33s cubic-bezier(0.694,0.0482,0.335,1);
}
.full_width nav.content_menu.fixed {
left: 0;
}
.right_side_menu_opened .full_width nav.content_menu.fixed {
left: -270px;
}
.container_inner nav.content_menu{
width: 1100px;
}
.container_inner nav.content_menu.fixed{
-moz-box-shadow: 0 4px 4px -4px rgba(0,0,0,0.11);
-webkit-box-shadow: 0 4px 4px -4px rgba(0,0,0,0.11);
box-shadow: 0 4px 4px -4px rgba(0,0,0,0.11);
}
nav.content_menu ul{
width: 1100px;
margin: 0px auto;
position: relative;
list-style: none outside none;
padding: 0px;
text-align: center;
-webkit-backface-visibility: hidden;
}
nav.content_menu ul li{
display: inline-block;
padding: 0px;
text-align: center;
position: relative;
-webkit-backface-visibility: hidden;
}
nav.content_menu ul li .arrow{
background-image: url("img/content_menu_arrow.png");
background-position: 0px 0px;
background-repeat: no-repeat;
display: none;
width: 11px;
height: 7px;
position: absolute;
left: 50%;
margin: -1px 0px 0px -5px;
-webkit-backface-visibility: hidden;
}
nav.content_menu.fixed ul li.active .arrow{
display: none;
}
nav.content_menu ul li a{
color: #c3c3c3;
font-size: 13px;
text-decoration: none;
display: inline-block;
position: relative;
cursor: pointer;
padding: 21px 20px;
margin: 0px;
}
nav.content_menu ul li a span{
display: block;
width: 100%;
text-transform: uppercase;
letter-spacing: 1px;
line-height: 18px;
padding: 12px 0 0 0;
font-weight: 600;
}
nav.content_menu ul li i{
color: #c3c3c3;
margin: 4px 0px 0px 0px;
font-size:24px;
line-height: 1em;
display: block;
}
nav.content_menu ul li i.undefined{
display: none;
}
nav.content_menu ul li.active:hover i,
nav.content_menu ul li:hover i,
nav.content_menu ul li.active:hover a,
nav.content_menu ul li:hover a{
color: #1abc9c;
}
nav.content_menu ul li.active i,
nav.content_menu ul li.active a{
color: #303030;
}
nav.content_menu .nav_select_menu{
display: none;
border: 1px solid #eaeaea;
}
nav.content_menu .nav_select_menu .nav_select_button{
cursor: pointer;
display: block;
height: 40px;
position: relative;
width: 40px;
line-height: 40px;
text-align: center;
float: right;
}
nav.content_menu .nav_select_menu ul{
display: none;
border: 0px;
width: 100%;
position: relative;
top: 0px;
text-align: left;
padding: 0px 0px 10px 0px;
float: left;
z-index: 100;
zoom:1;
}
nav.content_menu .nav_select_menu ul li{
display: block;
border: 0px;
float: none;
padding: 0px;
margin: 0px;
text-align: left;
position: relative;
-webkit-backface-visibility: hidden;
}
nav.content_menu .nav_select_menu ul li a{
line-height: 30px;
}
nav.content_menu .nav_select_menu ul li a i{
width: 12px;
text-align: center;
}
.boxed nav.content_menu.fixed{
padding: 0px;
width: 1100px;
}
/******** Content Menu - End ********/
/******** Visual Composer - Start ********/
.section_inner_margin,
.parallax_section_inner_margin
{
margin-left: -15px;
margin-right: -15px;
}
/******** Visual Composer - End ********/
/* ==========================================================================
Contact form 7 styles
========================================================================== */
.wpcf7 form.wpcf7-form p {
margin-bottom: 20px;
}
input.wpcf7-form-control.wpcf7-text,
input.wpcf7-form-control.wpcf7-number,
input.wpcf7-form-control.wpcf7-date,
textarea.wpcf7-form-control.wpcf7-textarea,
select.wpcf7-form-control.wpcf7-select {
width: 100%;
}
input.wpcf7-form-control.wpcf7-text,
input.wpcf7-form-control.wpcf7-number,
input.wpcf7-form-control.wpcf7-date,
textarea.wpcf7-form-control.wpcf7-textarea,
select.wpcf7-form-control.wpcf7-select,
input.wpcf7-form-control.wpcf7-quiz {
margin: 5px 0 0;
padding: 15px;
border: 0;
outline: 0;
resize: none;
font-size: 13px;
line-height: 17px;
background-color: #fff;
color: #818181;
font-family: 'Raleway';
font-weight: 400;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
input.wpcf7-form-control.wpcf7-quiz {
margin-left: 15px;
}
span.wpcf7-form-control-wrap .wpcf7-form-control.wpcf7-checkbox input[type="checkbox"],
span.wpcf7-form-control-wrap .wpcf7-form-control.wpcf7-radio input[type="radio"] {
position: relative;
top: 2px;
}
span.wpcf7-form-control-wrap .wpcf7-form-control.wpcf7-checkbox input[type="checkbox"] {
margin-left: 5px;
}
input.wpcf7-form-control.wpcf7-submit {
position: relative;
display: inline-block;
width: auto;
height: 39px;
line-height: 36px;
margin: 0;
padding: 0px 23px;
font-size: 13px;
font-weight: 700;
font-family: 'Raleway', sans-serif;
text-align: left;
text-decoration: none;
cursor: pointer;
white-space: nowrap;
outline: none;
font-style: normal;
text-transform: uppercase;
letter-spacing: 1px;
-o-border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
-ms-border-radius: 4px;
border-radius: 4px;
text-shadow: none;
background-color: transparent;
-webkit-transition: all 0.1s linear;
-moz-transition: all 0.1s linear;
-ms-transition: all 0.1s linear;
-o-transition: all 0.1s linear;
transition: all 0.1s linear;
-webkit-box-sizing: initial;
-moz-box-sizing: initial;
box-sizing: initial;
}
input.wpcf7-form-control.wpcf7-submit[disabled] {
color: #818181;
border: 2px solid #818181;
cursor: not-allowed;
}
input.wpcf7-form-control.wpcf7-submit:not([disabled]) {
border: 2px solid #303030;
color: #303030;
}
input.wpcf7-form-control.wpcf7-submit:not([disabled]):hover {
background-color: #1abc9c;
border-color: #1abc9c;
color: #fff;
text-decoration: none;
}
input.wpcf7-form-control.wpcf7-range {
width: 100%;
}
div.wpcf7-response-output {
position: relative;
padding: 17px 30px 17px 55px;
color: #fff;
text-transform: uppercase;
font-weight: 500;
margin-left: 0;
margin-right: 0;
font-weight: 500;
font-size: 15px;
text-transform: uppercase;
letter-spacing: 1px;
border: none;
}
div.wpcf7-response-output:before {
font-family: 'FontAwesome', sans-serif;
width: 20px;
height: 20px;
display: inline-block;
color: #fff;
position: absolute;
left: 25px;
}
div.wpcf7-response-output.wpcf7-mail-sent-ok {
background-color: #1abc9c;
}
div.wpcf7-response-output.wpcf7-mail-sent-ok:before {
content: "\f087";
}
div.wpcf7-response-output.wpcf7-validation-errors {
background-color: #f1c40f;
}
div.wpcf7-response-output.wpcf7-validation-errors:before {
content: "\f12a";
}
.two_columns_form_without_space,
.two_columns_form_with_space{
display: table;
}
.two_columns_form_with_space input.wpcf7-form-control.wpcf7-text,
.two_columns_form_without_space input.wpcf7-form-control.wpcf7-text{
margin: 0;
}
.two_columns_form_without_space .column_left {
display: table-cell;
vertical-align: top;
}
.two_columns_form_without_space .column_right {
display: table-cell;
width: 1%;
text-align: left;
vertical-align: top;
}
.two_columns_form_with_space .column_left {
display: table-cell;
vertical-align: top;
padding-right: 5px;
}
.two_columns_form_with_space .column_right {
display: table-cell;
width: 1%;
vertical-align: top;
padding-left: 5px;
}
/* ==========================================================================
End Contact form 7 styles
========================================================================== */
/* ==========================================================================
Gravity forms styles
========================================================================== */
body .gform_wrapper .gform_fields .gfield{
margin: 0 0 20px 0;
}
body .gform_wrapper .gf_progressbar,
body .gform_wrapper .gf_progressbar_wrapper,
body .gform_wrapper .top_label input.large,
body .gform_wrapper .top_label select.large,
body .gform_wrapper .top_label textarea.textarea {
/*width: 100%;*/
}
body .gform_wrapper .gf_progressbar_percentage,
body .gform_wrapper .gf_step,
body .gform_wrapper .gf_step span.gf_step_number,
body .gform_wrapper .gfield_description,
body .gform_wrapper input[type=text],
body .gform_wrapper input[type=url],
body .gform_wrapper input[type=email],
body .gform_wrapper input[type=tel],
body .gform_wrapper input[type=number],
body .gform_wrapper input[type=password],
body .gform_wrapper textarea,
body .gform_wrapper input[type="button"],
body .gform_wrapper input[type="submit"],
body .gform_wrapper input[type="reset"],
body .gform_wrapper .chzn-container .chzn-single,
body .gform_wrapper .chzn-container-single .chzn-single,
body .gform_wrapper select {
font-family: 'Raleway', sans-serif;
}
body .gform_wrapper .gf_progressbar,
body .gform_wrapper .chzn-container .chzn-single,
body .gform_wrapper .chzn-container-single .chzn-single,
body .gform_wrapper .chzn-container-single .chzn-drop,
body .gform_wrapper .chzn-container-multi .chzn-drop,
body .gform_wrapper .chzn-container-active .chzn-single,
body .gform_wrapper .chzn-container-active .chzn-choices {
-webkit-border-radius: 0;
-moz-border-radius: 0;
border-radius: 0;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
body .gform_wrapper .gf_progressbar,
body .gform_wrapper .chzn-container .chzn-single,
body .gform_wrapper .chzn-container-single .chzn-single,
body .gform_wrapper input[type=text],
body .gform_wrapper input[type=url],
body .gform_wrapper input[type=email],
body .gform_wrapper input[type=tel],
body .gform_wrapper input[type=number],
body .gform_wrapper input[type=password],
body .gform_wrapper textarea,
body .gform_wrapper .chzn-container-single .chzn-single div,
body .gform_wrapper .chzn-container-single .chzn-single b,
body .gform_wrapper .chzn-container .chzn-drop,
body .gform_wrapper .chzn-choices,
body .gform_wrapper .chzn-container-multi .chzn-choices,
body .gform_wrapper li.gfield.gfield_error,
body .gform_wrapper li.gfield.gfield_error.gfield_contains_required.gfield_creditcard_warning,
body .gform_wrapper select{
border: 0;
}
body .gform_wrapper .gf_progressbar,
body .gform_wrapper .chzn-container .chzn-single,
body .gform_wrapper .chzn-container-single .chzn-single{
background-image: none;
}
body .gform_wrapper .top_label .gfield_label,
body .gform_wrapper input[type=text],
body .gform_wrapper input[type=url],
body .gform_wrapper input[type=email],
body .gform_wrapper input[type=tel],
body .gform_wrapper input[type=number],
body .gform_wrapper input[type=password],
body .gform_wrapper textarea,
body .gform_wrapper .ginput_left input:focus+label,
body .gform_wrapper .ginput_right input:focus+label,
body .gform_wrapper .ginput_full input:focus+label,
body .gform_wrapper table.gfield_list thead th {
font-weight: 400;
}
body .gform_wrapper .charleft{
margin-top: 0;
}
body .gform_wrapper .gfield_description {
padding: 5px 0 0 0;
}
body .gform_wrapper input[type=text],
body .gform_wrapper input[type=url],
body .gform_wrapper input[type=email],
body .gform_wrapper input[type=tel],
body .gform_wrapper input[type=number],
body .gform_wrapper input[type=password],
body .gform_wrapper textarea,
body .gform_wrapper select,
body .gform_wrapper.gf_browser_chrome .ginput_complex select,
body .gform_wrapper.gf_browser_chrome .ginput_complex .ginput_right select {
padding: 15px;
outline: 0;
resize: none;
box-sizing: border-box;
}
body .gform_wrapper input[type=text],
body .gform_wrapper input[type=url],
body .gform_wrapper input[type=email],
body .gform_wrapper input[type=tel],
body .gform_wrapper input[type=number],
body .gform_wrapper input[type=password],
body .gform_wrapper textarea,
body .gform_wrapper input[type="button"],
body .gform_wrapper input[type="submit"],
body .gform_wrapper input[type="reset"],
body .gform_wrapper .chzn-container .chzn-single,
body .gform_wrapper .chzn-container-single .chzn-single,
body .gform_wrapper select{
font-size: 13px;
}
body .gform_wrapper input[type=text],
body .gform_wrapper input[type=url],
body .gform_wrapper input[type=email],
body .gform_wrapper input[type=tel],
body .gform_wrapper input[type=number],
body .gform_wrapper input[type=password],
body .gform_wrapper textarea,
body .gform_wrapper .chzn-container .chzn-single,
body .gform_wrapper .chzn-container-single .chzn-single {
line-height: 17px;
}
body .gform_wrapper input[type=text],
body .gform_wrapper input[type=url],
body .gform_wrapper input[type=email],
body .gform_wrapper input[type=tel],
body .gform_wrapper input[type=number],
body .gform_wrapper input[type=password],
body .gform_wrapper textarea,
body .gform_wrapper input[type=text],
body .gform_wrapper input[type=url],
body .gform_wrapper input[type=email],
body .gform_wrapper input[type=tel],
body .gform_wrapper input[type=number],
body .gform_wrapper input[type=password],
body .gform_wrapper .chzn-container .chzn-single,
body .gform_wrapper .chzn-container-single .chzn-single,
body .gform_wrapper .chzn-container-single .chzn-single b {
background-color: #ffffff;
}
body .gform_wrapper input[type=text],
body .gform_wrapper input[type=url],
body .gform_wrapper input[type=email],
body .gform_wrapper input[type=tel],
body .gform_wrapper input[type=number],
body .gform_wrapper input[type=password],
body .gform_wrapper textarea,
body .gform_wrapper .chzn-container-single .chzn-single span,
body .gform_wrapper select{
color: #818181;
}
body .gform_wrapper input[type=text],
body .gform_wrapper input[type=url],
body .gform_wrapper input[type=email],
body .gform_wrapper input[type=tel],
body .gform_wrapper input[type=number],
body .gform_wrapper input[type=password],
body .gform_wrapper textarea,
body .gform_wrapper .chzn-container,
body .gform_wrapper select{
margin: 5px 0 0;
}
body .gform_wrapper input[type="button"],
body .gform_wrapper input[type="submit"],
body .gform_wrapper input[type="reset"]{
position: relative;
display: inline-block;
width: auto;
height: 39px;
line-height: 36px;
margin: 0;
padding: 0px 23px;
border: 2px solid #303030;
font-weight: 700;
text-align: left;
color: #303030;
text-decoration: none;
cursor: pointer;
white-space: nowrap;
outline: none;
font-style: normal;
text-transform: uppercase;
letter-spacing: 1px;
-o-border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
-ms-border-radius: 4px;
border-radius: 4px;
text-shadow: none;
background-color: transparent;
-webkit-transition: all 0.1s linear;
-moz-transition: all 0.1s linear;
-ms-transition: all 0.1s linear;
-o-transition: all 0.1s linear;
transition: all 0.1s linear;
}
body .gform_wrapper input[type="button"]:hover,
body .gform_wrapper input[type="submit"]:hover,
body .gform_wrapper input[type="reset"]:hover{
background-color: #1abc9c;
border-color: #1abc9c;
color: #ffffff;
text-decoration: none;
}
body .gform_wrapper .chzn-container .chzn-single,
body .gform_wrapper .chzn-container-single .chzn-single {
height: auto;
padding: 15px 2%;
}
body .gform_wrapper .chzn-container-single .chzn-single div b{
background-position: -18px 10px;
}
body .gform_wrapper .chzn-container-single .chzn-single-with-drop div b{
background-position: -1px 10px;
}
body .gform_wrapper .chzn-container-single .chzn-search input{
border: 1px solid #aaaaaa;
}
body .gform_wrapper .chzn-choices{
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ffffff), color-stop(0, #ffffff)) !important;
}
body .gform_wrapper .chzn-choices .search-field .default{
padding-left: 10%;
}
body .gform_wrapper .chzn-container-multi .chzn-choices .search-field input {
padding: 15px;
}
body .gform_wrapper div.validation_error,
body .gform_wrapper .gform_confirmation_message {
position: relative;
padding: 17px 30px 17px 30px;
color: #fff;
text-transform: uppercase;
margin-left: 0;
margin-right: 0;
font-weight: 500;
font-size: 15px;
text-transform: uppercase;
letter-spacing: 1px;
border: none;
}
body .gform_wrapper div.validation_error {
background-color: #f1c40f;
}
body .gform_wrapper .gform_confirmation_message{
background-color: #1abc9c;
}
body .gform_wrapper .ginput_complex .name_prefix,
body .gform_wrapper .ginput_complex .name_suffix,
body .gform_wrapper input.ginput_quantity{
width: 60px !important;
}
body .gform_wrapper .datepicker {
width: 105px !important;
}
body .gform_wrapper .gfield_time_ampm select {
min-width: 80px;
}
body .gform_wrapper .gfield_time_hour{
vertical-align: middle;
}
body .gform_wrapper .button.gform_button_select_files{
height: 31px;
line-height: 24px;
padding: 0 9px;
font-size: 12px;
margin-left: 10px;
}
/* ==========================================================================
End Gravity forms styles
========================================================================== */
/* ==========================================================================
Vertical menu styles
========================================================================== */
.vertical_menu_enabled .q_slider,
.vertical_menu_enabled .full_width,
.vertical_menu_enabled .content .container,
.vertical_menu_enabled .title_outer,
.vertical_menu_enabled footer{
padding-left: 260px;
}
.boxed.vertical_menu_enabled .q_slider,
.boxed.vertical_menu_enabled .full_width,
.boxed.vertical_menu_enabled .content .container,
.boxed.vertical_menu_enabled .title_outer,
.boxed.vertical_menu_enabled footer{
padding-left: 0px;
}
.boxed.vertical_menu_enabled,
.boxed.vertical_menu_enabled footer.uncover{
padding-left: 260px;
}
.vertical_menu_enabled .content .title .container{
padding-left: 0px;
}
.vertical_menu_enabled .content .container,
.vertical_menu_enabled .q_slider,
.vertical_menu_enabled footer{
width: auto;
}
aside.vertical_menu_area {
position: fixed;
width: 260px;
top: 0;
left: 0;
padding:10px 30px;
background-color: #fff;
height: 100%;
z-index: 101;
-webkit-backface-visibility:hidden;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
-webkit-transition: background-color 0.3s ease;
-moz-transition: background-color 0.3s ease;
-o-transition: background-color 0.3s ease;
-ms-transition: background-color 0.3s ease;
transition: background-color 0.3s ease;
outline: none;
}
aside.vertical_menu_area.with_scroll {
overflow: hidden;
}
aside.vertical_menu_area .vertical_menu_area_widget_holder{
font-size:13px;
position: relative;
}
.vertical_menu_enabled.vertical_area_transparent .content{
padding-left: 0px;
}
.vertical_menu_transparency_on aside.vertical_menu_area.light .vertical_menu_area_widget_holder,
.vertical_menu_transparency_on aside.vertical_menu_area.light .widget a,
.vertical_menu_transparency_on aside.vertical_menu_area.light .q_social_icon_holder i.simple_social{
color: #fff;
}
.vertical_menu_transparency_on aside.vertical_menu_area.dark .vertical_menu_area_widget_holder,
.vertical_menu_transparency_on aside.vertical_menu_area.dark .widget a,
.vertical_menu_transparency_on aside.vertical_menu_area.dark .q_social_icon_holder i.simple_social{
color: #000;
}
.vertical_menu_enabled header{
display: block;
}
.vertical_menu_enabled header .header_inner{
display: none;
}
.vertical_area_background{
position: fixed;
width: 260px;
height: 100%;
background-position: right top;
background-repeat: no-repeat;
background-size: cover;
top: 0px;
left: 0px;
z-index: 0;
-webkit-transition: opacity 0.6s ease;
-moz-transition: opacity 0.6s ease;
-o-transition: opacity 0.6s ease;
-ms-transition: opacity 0.6s ease;
transition: opacity 0.6s ease;
opacity: 1;
}
.vertical_logo_wrapper{
z-index: 100;
position: relative;
}
.vertical_logo_wrapper img{
max-width: 100%;
position: absolute;
top: 0px;
left: 0px;
-webkit-transition: opacity 0.3s ease;
-moz-transition: opacity 0.3s ease;
-o-transition: opacity 0.3s ease;
-ms-transition: opacity 0.3s ease;
transition: opacity 0.3s ease;
}
.q_logo_vertical img.normal{
position: relative;
}
.q_logo_vertical img.light,
.q_logo_vertical img.dark{
opacity: 0;
}
.vertical_menu_transparency_on .light .q_logo_vertical img.normal{
opacity:0;
}
.vertical_menu_transparency_on .light .q_logo_vertical img.light{
opacity:1;
}
.vertical_menu_transparency_on .light .q_logo_vertical img.dark{
opacity:0;
}
.vertical_menu_transparency_on .dark .q_logo_vertical img.normal{
opacity:0;
}
.vertical_menu_transparency_on .dark .q_logo_vertical img.light{
opacity:0;
}
.vertical_menu_transparency_on .dark .q_logo_vertical img.dark{
opacity:1;
}
nav.vertical_menu {
position: relative;
z-index: 101;
margin: 45px 0 0 0;
}
.vertical_menu ul{
list-style: none;
}
.vertical_menu ul li{
position: relative;
}
nav.vertical_menu > ul > li > a {
position: relative;
color: #303030;
font-size: 13px;
font-weight: 700;
letter-spacing: 1px;
text-decoration: none;
text-transform: uppercase;
display: block;
position: relative;
line-height: 34px;
padding: 0 0px;
margin: 0;
cursor: pointer;
-webkit-transition: color 0.3s ease;
-moz-transition: color 0.3s ease;
-o-transition: color 0.3s ease;
-ms-transition: color 0.3s ease;
transition: color 0.3s ease;
}
.vertical_menu_transparency_on .light nav.vertical_menu > ul > li > a{
color: #ffffff;
}
.vertical_menu_transparency_on .dark nav.vertical_menu > ul > li > a{
color: #000000;
}
.vertical_menu .second .inner{
position: relative;
display: block;
padding: 0;
z-index: 997;
}
.vertical_menu_toggle .second .inner_arrow,
.vertical_menu_on_click .second .inner_arrow,
.vertical_menu_float .second .inner_arrow{
display: none;
}
.vertical_menu .second .inner > ul > li > a:hover{
color: #303030;
}
.vertical_menu_toggle .second,
.vertical_menu_on_click .second{
margin: 0px;
display: none;
overflow: hidden;
z-index: 10;
}
.vertical_menu_toggle .second ul ul,
.vertical_menu_on_click .second ul ul{
display: none;
}
nav.vertical_menu_toggle ul li a,
nav.vertical_menu_on_click ul li a{
display: block;
}
nav.vertical_menu_toggle ul li a .line,
nav.vertical_menu_on_click ul li a .line{
display: none;
}
nav.vertical_menu_toggle ul > li.menu-item-has-children > a > .plus,
nav.vertical_menu_on_click ul > li.menu-item-has-children > a > .plus,
nav.vertical_menu_float ul > li.menu-item-has-children > a > .plus{
float: right;
width: 20px;
height: 8px;
margin: 12px 0 0 0;
z-index: 10000;
display: block;
position: relative;
background-image: url('img/vertical_menu_cross.png');
background-repeat: no-repeat;
background-position: 100%;
-o-background-size: 8px 8px;
-webkit-background-size: 8px 8px;
-moz-background-size: 8px 8px;
background-size: 8px 8px;
}
nav.vertical_menu_toggle ul li ul > li.menu-item-has-children > a > .plus,
nav.vertical_menu_on_click ul li ul > li.menu-item-has-children > a > .plus,
nav.vertical_menu_float ul li ul > li.menu-item-has-children > a > .plus{
margin: 5px 0 0 0;
}
.no-touch nav.vertical_menu_toggle ul > li.menu-item-has-children > a:hover > .plus,
.no-touch nav.vertical_menu_on_click ul > li.menu-item-has-children.open > a > .plus,
.no-touch nav.vertical_menu_float ul > li.menu-item-has-children.open > a > .plus{
background-image: url('img/vertical_menu_minus.png');
}
.touch nav.vertical_menu_toggle ul > li.menu-item-has-children.open > a > .plus,
.touch nav.vertical_menu_on_click ul > li.menu-item-has-children.open > a > .plus,
.touch nav.vertical_menu_float ul > li.menu-item-has-children.open > a > .plus {
background-image: url('img/vertical_menu_minus.png');
}
nav.vertical_menu_toggle ul li.menu-item-has-children a span,
nav.vertical_menu_on_click ul li.menu-item-has-children a span,
nav.vertical_menu_float ul li.menu-item-has-children a span{
display: inline-block;
max-width: 180px;
}
.vertical_menu_float .menu-item .second {
position: absolute;
top: 0;
left: calc(100% + 30px); /*because of the padding*/
width: 100%;
margin-left: 50px;
opacity: 0;
background-color: #fff;
visibility: hidden;
transition: all 0.3s ease-in-out;
}
.vertical_menu_float .menu-item .second *{
visibility: hidden;
transition: visibility 0.3s ease-in-out;
}
.vertical_menu_float .menu-item .second.vertical_menu_start {
margin-left: 0px;
opacity: 1;
visibility: visible;
}
.vertical_menu_float .menu-item .second.vertical_menu_start *{
visibility: visible;
}
.vertical_menu_float .menu-item .second.vertical_menu_start ul li ul,
.vertical_menu_float .menu-item .second.vertical_menu_start ul li ul *{
visibility:hidden;
}
.vertical_menu_float .menu-item .second.vertical_menu_start ul li ul.vertical_submenu_start,
.vertical_menu_float .menu-item .second.vertical_menu_start ul li ul.vertical_submenu_start *{
visibility:visible;
}
.vertical_menu_float .second .inner ul{
width: 100%;
}
.vertical_menu_float li.narrow .second .inner ul{ /*because of the .narrow styling*/
border: none;
background-color: #fff;
padding: 0;
}
.vertical_menu_float .second .inner ul li ul {
position: absolute;
border:none;
top: 0;
left: 100%;
margin-left: 50px;
height: auto;
visibility: hidden;
width: 100%;
opacity: 0;
overflow: hidden;
z-index: 10;
background-color: #fff;
padding: 0;
transition: all 0.3s ease-in-out;
}
.vertical_menu_float .second .inner ul li ul.vertical_submenu_start{
opacity: 1;
margin-left:0;
visibility: visible;
}
.vertical_menu_enabled.vertical_menu_transparency_on:not(.vertical_menu_hidden) aside.vertical_menu_area .vertical_menu_float .second .inner ul li ul,
.vertical_menu_enabled.vertical_menu_transparency_on:not(.vertical_menu_hidden) aside.vertical_menu_area .vertical_menu_float .menu-item .second {
background-color: transparent !important;
}
.vertical_menu_transparency_on .light nav.vertical_menu_toggle ul > li.menu-item-has-children > a > .plus,
.vertical_menu_transparency_on .light nav.vertical_menu_on_click ul > li.menu-item-has-children > a > .plus,
.vertical_menu_transparency_on .light nav.vertical_menu_float ul > li.menu-item-has-children > a > .plus{
background-image: url('img/vertical_menu_cross_white.png');
}
.vertical_menu_transparency_on .light nav.vertical_menu_toggle ul > li.menu-item-has-children > a:hover > .plus,
.vertical_menu_transparency_on .light nav.vertical_menu_on_click ul > li.menu-item-has-children.open > a > .plus,
.vertical_menu_transparency_on .light nav.vertical_menu_float ul > li.menu-item-has-children.open > a > .plus{
background-image: url('img/vertical_menu_minus_white.png');
}
.vertical_menu_transparency_on .dark nav.vertical_menu_toggle ul > li.menu-item-has-children > a > .plus,
.vertical_menu_transparency_on .dark nav.vertical_menu_on_click ul > li.menu-item-has-children > a > .plus,
.vertical_menu_transparency_on .dark nav.vertical_menu_float ul > li.menu-item-has-children > a > .plus{
background-image: url('img/vertical_menu_cross_black.png');
}
.vertical_menu_transparency_on .dark nav.vertical_menu_toggle ul > li.menu-item-has-children > a:hover > .plus,
.vertical_menu_transparency_on .dark nav.vertical_menu_on_click ul > li.menu-item-has-children.open > a > .plus,
.vertical_menu_transparency_on .dark nav.vertical_menu_float ul > li.menu-item-has-children.open > a > .plus{
background-image: url('img/vertical_menu_minus_black.png');
}
@media only screen and (-webkit-min-device-pixel-ratio:1.5), only screen and (min--moz-device-pixel-ratio:1.5), only screen and (-o-min-device-pixel-ratio:150/100), only screen and (min-device-pixel-ratio:1.5), only screen and (min-resolution:160dpi) {
nav.vertical_menu_toggle ul li.menu-item-has-children a .plus,
nav.vertical_menu_on_click ul li.menu-item-has-children a .plus,
nav.vertical_menu_float ul li.menu-item-has-children a .plus{
background-image: url('img/vertical_menu_cross@1_5x.png');
}
.no-touch nav.vertical_menu_toggle ul > li.menu-item-has-children > a:hover > .plus,
.no-touch nav.vertical_menu_on_click ul > li.menu-item-has-children.open > a > .plus,
.no-touch nav.vertical_menu_float ul > li.menu-item-has-children.open > a > .plus
{
background-image: url('img/vertical_menu_minus@1_5x.png');
}
.touch nav.vertical_menu_toggle ul > li.menu-item-has-children.open > a > .plus,
.touch nav.vertical_menu_on_click ul > li.menu-item-has-children.open > a > .plus,
.touch nav.vertical_menu_float ul > li.menu-item-has-children.open > a > .plus {
background-image: url('img/vertical_menu_minus@1_5x.png');
}
.vertical_menu_transparency_on .light nav.vertical_menu_toggle ul li.menu-item-has-children a .plus,
.vertical_menu_transparency_on .light nav.vertical_menu_on_click ul li.menu-item-has-children a .plus,
.vertical_menu_transparency_on .light nav.vertical_menu_float ul li.menu-item-has-children a .plus{
background-image: url('img/vertical_menu_cross_white@1_5x.png');
}
.vertical_menu_transparency_on .light nav.vertical_menu_toggle ul > li.menu-item-has-children > a:hover > .plus,
.vertical_menu_transparency_on .light nav.vertical_menu_on_click ul > li.menu-item-has-children.open > a > .plus,
.vertical_menu_transparency_on .light nav.vertical_menu_float ul > li.menu-item-has-children.open > a > .plus
{
background-image: url('img/vertical_menu_minus_white@1_5x.png');
}
.vertical_menu_transparency_on .dark nav.vertical_menu_toggle ul li.menu-item-has-children a .plus,
.vertical_menu_transparency_on .dark nav.vertical_menu_on_click ul li.menu-item-has-children a .plus,
.vertical_menu_transparency_on .dark nav.vertical_menu_float ul li.menu-item-has-children a .plus{
background-image: url('img/vertical_menu_cross_black@1_5x.png');
}
.vertical_menu_transparency_on .dark nav.vertical_menu_toggle ul > li.menu-item-has-children > a:hover > .plus,
.vertical_menu_transparency_on .dark nav.vertical_menu_on_click ul > li.menu-item-has-children.open > a > .plus,
.vertical_menu_transparency_on .dark nav.vertical_menu_float ul > li.menu-item-has-children.open > a > .plus
{
background-image: url('img/vertical_menu_minus_black@1_5x.png');
}
}
@media only screen and (-webkit-min-device-pixel-ratio:2.0), only screen and (min--moz-device-pixel-ratio:2.0), only screen and (-o-min-device-pixel-ratio:200/100), only screen and (min-device-pixel-ratio:2.0), only screen and (min-resolution:210dpi) {
nav.vertical_menu_toggle ul li.menu-item-has-children a .plus,
nav.vertical_menu_on_click ul li.menu-item-has-children a .plus,
nav.vertical_menu_float ul li.menu-item-has-children a .plus{
background-image: url('img/vertical_menu_cross@2x.png');
}
.no-touch nav.vertical_menu_toggle ul > li.menu-item-has-children > a:hover > .plus,
.no-touch nav.vertical_menu_on_click ul > li.menu-item-has-children.open > a > .plus,
.no-touch nav.vertical_menu_float ul > li.menu-item-has-children.open > a > .plus
{
background-image: url('img/vertical_menu_minus@2x.png');
}
.touch nav.vertical_menu_toggle ul > li.menu-item-has-children.open > a > .plus,
.touch nav.vertical_menu_on_click ul > li.menu-item-has-children.open > a > .plus,
.touch nav.vertical_menu_float ul > li.menu-item-has-children.open > a > .plus {
background-image: url('img/vertical_menu_minus@2x.png');
}
.vertical_menu_transparency_on .light nav.vertical_menu_toggle ul li.menu-item-has-children a .plus,
.vertical_menu_transparency_on .light nav.vertical_menu_on_click ul li.menu-item-has-children a .plus,
.vertical_menu_transparency_on .light nav.vertical_menu_float ul li.menu-item-has-children a .plus{
background-image: url('img/vertical_menu_cross_white@2x.png');
}
.vertical_menu_transparency_on .light nav.vertical_menu_toggle ul > li.menu-item-has-children > a:hover > .plus,
.vertical_menu_transparency_on .light nav.vertical_menu_on_click ul > li.menu-item-has-children.open > a > .plus,
.vertical_menu_transparency_on .light nav.vertical_menu_float ul > li.menu-item-has-children.open > a > .plus
{
background-image: url('img/vertical_menu_minus_white@2x.png');
}
.vertical_menu_transparency_on .dark nav.vertical_menu_toggle ul li.menu-item-has-children a .plus,
.vertical_menu_transparency_on .dark nav.vertical_menu_on_click ul li.menu-item-has-children a .plus,
.vertical_menu_transparency_on .dark nav.vertical_menu_float ul li.menu-item-has-children a .plus{
background-image: url('img/vertical_menu_cross_black@2x.png');
}
.vertical_menu_transparency_on .dark nav.vertical_menu_toggle ul > li.menu-item-has-children > a:hover > .plus,
.vertical_menu_transparency_on .dark nav.vertical_menu_on_click ul > li.menu-item-has-children.open > a > .plus,
.vertical_menu_transparency_on .dark nav.vertical_menu_float ul > li.menu-item-has-children.open > a > .plus
{
background-image: url('img/vertical_menu_minus_black@2x.png');
}
}
nav.vertical_menu_toggle ul li a .q_menu_arrow,
nav.vertical_menu_on_click ul li a .q_menu_arrow,
nav.vertical_menu_float ul li a .q_menu_arrow{
display: none;
}
nav.vertical_menu_toggle li.narrow .second .inner ul,
nav.vertical_menu_on_click li.narrow .second .inner ul{
background-color: transparent;
padding:0;
width: 100%;
}
nav.vertical_menu_toggle li.narrow .second .inner ul ul,
nav.vertical_menu_on_click li.narrow .second .inner ul ul{
display: none;
}
.vertical_menu_toggle .second .inner ul li a,
.vertical_menu_on_click .second .inner ul li a,
.vertical_menu_float .second .inner ul li a{
display: block;
height: auto;
font-family: inherit;
font-size: 13px;
line-height: 18px;
color: #818181;
margin: 0;
padding: 5px 0px 5px 0px;
text-decoration: none;
-webkit-transition: color 0.3s ease;
-moz-transition: color 0.3s ease;
-o-transition: color 0.3s ease;
-ms-transition: color 0.3s ease;
transition: color 0.3s ease;
}
.vertical_menu_transparency_on .light .vertical_menu_toggle .second .inner ul li a,
.vertical_menu_transparency_on .light .vertical_menu_on_click .second .inner ul li a,
.vertical_menu_transparency_on .light .vertical_menu_float .second .inner ul li a{
color: #ffffff;
}
.vertical_menu_transparency_on .dark .vertical_menu_toggle .second .inner ul li a,
.vertical_menu_transparency_on .dark .vertical_menu_on_click .second .inner ul li a,
.vertical_menu_transparency_on .dark .vertical_menu_float .second .inner ul li a{
color: #000000;
}
.vertical_menu_toggle .second .inner ul ul li a,
.vertical_menu_on_click .second .inner ul ul li a,
.vertical_menu_float .second .inner ul li a{
padding-left: 15px;
padding-right: 15px;
}
.vertical_menu_area_widget_holder{
margin:60px 0 0 0;
}
.vertical_menu_enabled .carousel-inner:not(.relative_position){
left: 260px !important;
}
.vertical_menu_area .q_social_icon_holder{
margin: 0 8px 2px 0 !important;
}
.vertical_menu_enabled .content{
margin-top:0 !important;
padding-top:0 !important;
}
.boxed.vertical_menu_enabled .carousel-inner{
width: 1150px !important;
left: auto !important;
}
.vertical_menu_enabled.vertical_menu_transparency .full_section_inner{
overflow: hidden;
}
.vertical_menu_enabled.vertical_menu_transparency_on:not(.vertical_menu_hidden) aside.vertical_menu_area{
background-color: transparent !important;
}
.vertical_menu_enabled.vertical_menu_transparency_on:not(.vertical_menu_hidden) aside.vertical_menu_area .vertical_area_background{
-webkit-transition: opacity 0.3s ease;
-moz-transition: opacity 0.3s ease;
-o-transition: opacity 0.3s ease;
-ms-transition: opacity 0.3s ease;
transition: opacity 0.3s ease;
opacity: 0 !important;
}
.vertical_menu_enabled.vertical_menu_transparency .q_slider{
padding-left: 0px;
}
.vertical_menu_enabled.vertical_menu_enabled.vertical_menu_transparency .carousel-inner:not(.relative_position){
left: 0px !important;
}
.boxed.vertical_menu_enabled.vertical_menu_enabled.vertical_menu_transparency .carousel-inner:not(.relative_position){
left: auto !important;
}
.vertical_menu_enabled.vertical_menu_transparency .carousel-control.left{
bottom: 60px;
height: 44px;
right: 105px;
top: auto;
width: 44px;
}
.vertical_menu_enabled.vertical_menu_transparency .carousel-control.right{
bottom: 60px;
height: 44px;
right: 50px;
top: auto;
width: 44px;
}
.vertical_menu_enabled.vertical_menu_transparency .carousel-control .prev_nav {
left: 0;
margin: 0 !important;
top: 0;
height: 40px;
width: 40px;
line-height: 40px;
}
.vertical_menu_enabled.vertical_menu_transparency .carousel-control .next_nav {
margin: 0 !important;
right: 0;
top: 0;
height: 40px;
width: 40px;
line-height: 40px;
}
.vertical_menu_enabled.vertical_menu_transparency .carousel-control i {
font-size: 24px;
line-height: 40px;
}
.vertical_menu_enabled.vertical_menu_transparency .carousel-indicators{
display: none !important;
}
.vertical_menu_enabled.page-template-landing_page-php .q_slider,
.vertical_menu_enabled.page-template-landing_page-php .full_width,
.vertical_menu_enabled.page-template-landing_page-php .content .container,
.vertical_menu_enabled.page-template-landing_page-php .title_outer,
.boxed.vertical_menu_enabled.page-template-landing_page-php,
.vertical_menu_enabled.page-template-landing_page-php .full_screen_holder{
padding-left: 0px !important;
}
.vertical_menu_enabled.page-template-landing_page-php .carousel-inner:not(.relative_position){
left: 0px !important;
}
/* vertical menu - hidden type START */
.vertical_menu_hidden aside.vertical_menu_area{
-webkit-box-shadow: 0px 0px 2px 2px rgba(0,0,0,.15);
box-shadow: 0px 0px 2px 2px rgba(0,0,0,.15);
left: -220px;
padding: 10px 40px;
-webkit-transition: left 0.15s ease-out;
-moz-transition: left 0.15s ease-out;
-o-transition: left 0.15s ease-out;
-ms-transform: left 0.15s ease-out;
transition: left 0.15s ease-out;
}
.vertical_menu_hidden .vertical_area_background{
left: -220px;
-webkit-transition: left 0.15s ease-out;
-moz-transition: left 0.15s ease-out;
-o-transition: left 0.15s ease-out;
-ms-transform: left 0.15s ease-out;
transition: left 0.15s ease-out;
}
.vertical_menu_hidden.vertical_menu_hidden_with_logo aside.vertical_menu_area,
.vertical_menu_hidden.vertical_menu_hidden_with_logo .vertical_area_background {
left: -190px;
}
.vertical_menu_hidden aside.vertical_menu_area.active,
.vertical_menu_hidden aside.vertical_menu_area.active .vertical_area_background{
left: 0px;
}
.vertical_menu_enabled.vertical_menu_hidden .full_screen_holder,
.vertical_menu_enabled.vertical_menu_hidden .q_slider,
.vertical_menu_enabled.vertical_menu_hidden .full_width,
body.page-template-blog-masonry-full-width-php.vertical_menu_enabled.vertical_menu_hidden .content .full_width,
.vertical_menu_enabled.vertical_menu_hidden .content .container,
.vertical_menu_enabled.vertical_menu_hidden .title_outer,
.vertical_menu_enabled.vertical_menu_hidden footer,
.boxed.vertical_menu_enabled.vertical_menu_hidden,
.boxed.vertical_menu_enabled.vertical_menu_hidden footer.uncover,
.vertical_menu_enabled.vertical_menu_hidden .full_screen_holder{
padding-left: 40px;
}
.vertical_menu_enabled.vertical_menu_hidden .carousel-inner:not(.relative_position){
left: 40px !important;
}
.vertical_menu_enabled.vertical_menu_hidden.vertical_menu_hidden_with_logo .full_screen_holder,
.vertical_menu_enabled.vertical_menu_hidden.vertical_menu_hidden_with_logo .q_slider,
.vertical_menu_enabled.vertical_menu_hidden.vertical_menu_hidden_with_logo .full_width,
.vertical_menu_enabled.vertical_menu_hidden.vertical_menu_hidden_with_logo .content .container,
.vertical_menu_enabled.vertical_menu_hidden.vertical_menu_hidden_with_logo .title_outer,
.vertical_menu_enabled.vertical_menu_hidden.vertical_menu_hidden_with_logo footer,
.boxed.vertical_menu_enabled.vertical_menu_hidden.vertical_menu_hidden_with_logo,
.boxed.vertical_menu_enabled.vertical_menu_hidden.vertical_menu_hidden_with_logo footer.uncover,
.vertical_menu_enabled.vertical_menu_hidden.vertical_menu_hidden_with_logo .full_screen_holder{
padding-left: 70px;
}
.vertical_menu_enabled.vertical_menu_hidden .carousel-control .prev_nav,
.vertical_menu_enabled.vertical_menu_hidden .carousel-control .next_nav{
margin-top: -27px !important;
}
.vertical_menu_hidden_button{
position: fixed;
top: 0;
left: 0px;
width: 40px;
height: 40px;
z-index: 11;
display: block;
}
.vertical_menu_enabled.vertical_menu_hidden.vertical_menu_hidden_with_logo .vertical_menu_hidden_button {
width: 70px;
height: 40px;
z-index: 1000;
}
.vertical_menu_hidden_button_line {
position: absolute;
top: 50%;
left: 50%;
font-size: 30px;
display: block;
margin-left: -11px;
width: 22px;
height: 3px;
background: #303030;
}
.vertical_menu_hidden_button_line:after,.vertical_menu_hidden_button_line:before{
content: '';
position: absolute;
width: 100%;
height: 3px;
background: #303030;
left: 0;
-webkit-transform-origin:center center;
-moz-transform-origin:center center;
-ms-transform-origin:center center;
-o-transform-origin:center center;
transform-origin:center center;
}
.vertical_menu_hidden_button_line:before{
top: -6px;
}
.vertical_menu_hidden_button_line:after{
bottom: -6px;
}
.vertical_menu_area.active .vertical_menu_hidden_button .vertical_menu_hidden_button_line{
background: rgba(220, 151, 31,0);
}
.vertical_menu_area.active .vertical_menu_hidden_button .vertical_menu_hidden_button_line:after{
-webkit-transform: rotate(-45deg) translate(2px,-8px);
-moz-transform: rotate(-45deg) translate(3px,-8px);
-ms-transform: rotate(-45deg) translate(3px,-8px);
-o-transform: rotate(-45deg) translate(3px,-8px);
transform: rotate(-45deg) translate(3px,-8px);
}
.vertical_menu_area.active .vertical_menu_hidden_button .vertical_menu_hidden_button_line:before{
-webkit-transform: rotate(45deg) translate(4px,9px);
-moz-transform: rotate(45deg) translate(3px,8px);
-ms-transform: rotate(45deg) translate(3px,8px);
-o-transform: rotate(45deg) translate(3px,8px);
transform: rotate(45deg) translate(3px,8px);
}
.vertical_menu_hidden_button_line,
.vertical_menu_hidden_button_line:before,
.vertical_menu_hidden_button_line:after{
-webkit-transition: all 0.3s cubic-bezier(0.585, -0.600, 0.430, 1.650);
-moz-transition: all 0.3s cubic-bezier(0.585, -0.600, 0.430, 1.650);
-ms-transition: all 0.3s cubic-bezier(0.585, -0.600, 0.430, 1.650);
-o-transition: all 0.3s cubic-bezier(0.585, -0.600, 0.430, 1.650);
transition: all 0.3s cubic-bezier(0.585, -0.600, 0.430, 1.650);
}
.vertical_menu_hidden_button:hover .vertical_menu_hidden_button_line:before{
top: -8px;
}
.vertical_menu_hidden_button:hover .vertical_menu_hidden_button_line:after{
bottom: -8px;
}
.vertical_menu_area.active .vertical_menu_hidden_button .vertical_menu_hidden_button_line:after{
bottom: -8px;
}
.vertical_menu_area.active .vertical_menu_hidden_button .vertical_menu_hidden_button_line:before{
top: -8px;
}
.vertical_menu_hidden .vertical_menu_area_bottom_logo {
position: fixed;
width: 70px;
text-align: center;
bottom: 0px;
z-index: 1000;
}
.vertical_menu_hidden .vertical_menu_area_bottom_logo_inner {
position: absolute;
bottom: 20px;
box-sizing: border-box;
text-align: center;
width: 100%;
}
.vertical_menu_hidden .vertical_menu_area_bottom_logo_inner a {
display: block;
padding: 0 10px;
}
.vertical_menu_hidden .vertical_menu_area_bottom_logo{
left: 0;
-webkit-transition: left 0.15s ease-in-out;
-moz-transition: left 0.15s ease-in-out;
-ms-transition: left 0.15s ease-in-out;
-o-transition: left 0.15s ease-in-out;
transition: left 0.15s ease-in-out;
}
.vertical_menu_hidden .vertical_menu_area_bottom_logo.active{
left: -70px;
}
.vertical_menu_hidden.vertical_menu_hidden_with_logo .vertical_menu_area:not(.active) .vertical_menu_area_inner{
left: -30px;
}
.vertical_menu_hidden.vertical_menu_hidden_with_logo .vertical_menu_area .vertical_menu_area_inner {
left: 0;
}
.vertical_menu_hidden.vertical_menu_hidden_with_logo .vertical_menu_area .vertical_menu_area_inner {
position: relative;
height: 100%;
}
/*vertical menu width for initially hidden type*/
.vertical_menu_hidden.vertical_menu_width_290 aside.vertical_menu_area,
.vertical_menu_hidden.vertical_menu_width_290 aside.vertical_menu_area .vertical_area_background{
width:290px;
left:-250px;
}
.vertical_menu_hidden.vertical_menu_width_350 aside.vertical_menu_area,
.vertical_menu_hidden.vertical_menu_width_350 aside.vertical_menu_area .vertical_area_background{
width:350px;
left:-310px;
}
.vertical_menu_hidden.vertical_menu_width_400 aside.vertical_menu_area,
.vertical_menu_hidden.vertical_menu_width_400 aside.vertical_menu_area .vertical_area_background{
width:400px;
left:-360px;
}
.vertical_menu_hidden.vertical_menu_width_290 aside.vertical_menu_area.active,
.vertical_menu_hidden.vertical_menu_width_290 aside.vertical_menu_area.active .vertical_area_background,
.vertical_menu_hidden.vertical_menu_width_350 aside.vertical_menu_area.active,
.vertical_menu_hidden.vertical_menu_width_350 aside.vertical_menu_area.active .vertical_area_background,
.vertical_menu_hidden.vertical_menu_width_400 aside.vertical_menu_area.active,
.vertical_menu_hidden.vertical_menu_width_400 aside.vertical_menu_area.active .vertical_area_background{
left:0;
}
/*vertical menu width for initially hidden type with logo at bottom */
.vertical_menu_hidden.vertical_menu_hidden_with_logo.vertical_menu_width_290 aside.vertical_menu_area,
.vertical_menu_hidden.vertical_menu_hidden_with_logo.vertical_menu_width_290 aside.vertical_menu_area .vertical_area_background{
width:290px;
left:-220px;
}
.vertical_menu_hidden.vertical_menu_hidden_with_logo.vertical_menu_width_350 aside.vertical_menu_area,
.vertical_menu_hidden.vertical_menu_hidden_with_logo.vertical_menu_width_350 aside.vertical_menu_area .vertical_area_background{
width:350px;
left:-280px;
}
.vertical_menu_hidden.vertical_menu_hidden_with_logo.vertical_menu_width_400 aside.vertical_menu_area,
.vertical_menu_hidden.vertical_menu_hidden_with_logo.vertical_menu_width_400 aside.vertical_menu_area .vertical_area_background{
width:400px;
left:-330px;
}
.vertical_menu_hidden.vertical_menu_hidden_with_logo.vertical_menu_width_290 aside.vertical_menu_area.active,
.vertical_menu_hidden.vertical_menu_hidden_with_logo.vertical_menu_width_290 aside.vertical_menu_area.active .vertical_area_background,
.vertical_menu_hidden.vertical_menu_hidden_with_logo.vertical_menu_width_350 aside.vertical_menu_area.active,
.vertical_menu_hidden.vertical_menu_hidden_with_logo.vertical_menu_width_350 aside.vertical_menu_area.active .vertical_area_background,
.vertical_menu_hidden.vertical_menu_hidden_with_logo.vertical_menu_width_400 aside.vertical_menu_area.active,
.vertical_menu_hidden.vertical_menu_hidden_with_logo.vertical_menu_width_400 aside.vertical_menu_area.active .vertical_area_background{
left:0;
}
/* vertical menu - hidden type END */
/* ==========================================================================
End Vertical menu styles
========================================================================== */
/* ==========================================================================
Popup menu start styles
========================================================================== */
.popup_menu_inner{
display: inline-block;
height: 2px;
position: relative;
top: -1px;
vertical-align: middle;
width: 20px;
position: relative;
width: 20px;
}
.popup_menu .line{
background-color: #9D9D9D;
height: 2px;
margin: 0px;
width: 13px;
top: 0px;
left: 0px;
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
-ms-transform: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
position: absolute;
display: inline-block;
}
.popup_menu .line:after, .popup_menu .line:before {
background-color: #9D9D9D;
content: "";
display: block;
height: 2px;
position: absolute;
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
-ms-transform: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
width: 13px;
z-index: -1;
-webkit-backface-visibility: hidden; /*because X sign jumps on hover in Chrome*/
}
@media only screen and (min-width: 1000px) {
.dark:not(.sticky):not(.scrolled) .popup_menu:not(.opened) .line,
.dark:not(.sticky):not(.scrolled) .popup_menu:not(.opened) .line:before,
.dark:not(.sticky):not(.scrolled) .popup_menu:not(.opened) .line:after,
.dark.header_style_on_scroll .popup_menu:not(.opened) .line,
.dark.header_style_on_scroll .popup_menu:not(.opened) .line:before,
.dark.header_style_on_scroll .popup_menu:not(.opened) .line:after{
background-color: #000;
}
.light:not(.sticky):not(.scrolled) .popup_menu:not(.opened) .line,
.light:not(.sticky):not(.scrolled) .popup_menu:not(.opened) .line:before,
.light:not(.sticky):not(.scrolled) .popup_menu:not(.opened) .line:after,
.light.header_style_on_scroll .popup_menu:not(.opened) .line,
.light.header_style_on_scroll .popup_menu:not(.opened) .line:before,
.light.header_style_on_scroll .popup_menu:not(.opened) .line:after{
background-color: #fff;
}
}
.popup_menu .line:before {
top: -4px;
}
.popup_menu .line:after {
top: 4px;
}
.side_menu_button .popup_menu:hover{
opacity: 0.8;
}
.popup_menu.opened .line{
background-color: transparent !important;
}
.popup_menu.opened .line:after {
background-color: #ffffff;
top: 0 !important;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-o-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
}
.popup_menu.opened .line:before {
background-color: #ffffff;
top: 0 !important;
-webkit-transform: rotate(-45deg);
-moz-transform: rotate(-45deg);
-o-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
transform: rotate(-45deg);
}
.popup_menu_holder_outer{
position: fixed;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
visibility: hidden;
opacity: 0;
z-index: 105; /* this have to be between header z-index and content z-index */
}
.popup_menu_holder{
width: 100%;
height: 100%;
background-color: rgba(48,48,48,0.95);
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
-ms-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
display: table;
}
.popup_menu_holder_inner{
display: table-cell;
vertical-align: middle;
padding: 100px 0px;
}
.popup_menu_opened .main_menu,
.popup_menu_opened .side_menu_button a:not(.popup_menu),
.popup_menu_opened #back_to_top,
.popup_menu_opened .header_top,
.popup_menu_opened header .tooltip,
.popup_menu_opened .mobile_menu_button,
.popup_menu_opened .fixed_top_header .header_bottom_center_widget,
.popup_menu_opened .fixed_top_header .header_bottom_right_widget_holder{
visibility: hidden !important;
}
.popup_menu_opened .header_bottom .container_inner{
border: none !important;
}
.popup_menu_opened .side_menu_button .shopping_cart_header{
display: none;
}
.popup_menu_opened .popup_menu_holder_outer{
visibility: visible;
opacity: 1;
}
.touch .popup_menu_holder_outer{
display: none;
}
.touch .popup_menu_opened .popup_menu_holder_outer{
display: block;
}
.popup_menu_opened header.scrolled .header_bottom,
.popup_menu_opened header.sticky .header_bottom{
background-color: transparent !important;
box-shadow: none;
}
.popup_menu_opened .header_top,
.popup_menu_opened .header_bottom,
.popup_menu_opened .fixed_top_header .top_header{
background-color: transparent !important;
border: 0px !important;
}
.popup_menu_opened .q_logo img.normal,
.popup_menu_opened .q_logo img.light,
.popup_menu_opened .q_logo img.sticky,
.popup_menu_opened .q_logo img.dark,
.popup_menu_opened .q_logo img.mobile {
opacity: 0 !important;
}
.popup_menu_opened header .q_logo img.popup{
opacity: 1 !important;
}
nav.popup_menu{
margin: 0px auto;
position: relative;
top: 0px;
text-align: left;
}
nav.popup_menu ul{
display: none;
position: relative;
list-style: none;
padding: 0;
margin: 0;
}
nav.popup_menu > ul{
display: block;
}
nav.popup_menu ul li{
margin: 0;
padding: 0;
text-align: center;
font-size: 45px;
line-height: 50px;
}
nav.popup_menu ul li a,
nav.popup_menu ul li h6{
font-size: 24px;
font-weight: 500;
line-height: 50px;
letter-spacing: 2px;
color: #ffffff;
padding: 0px;
display: block;
position: relative;
text-decoration: none;
text-transform: uppercase;
cursor: pointer;
}
nav.popup_menu ul li a:hover,
nav.popup_menu ul li h6:hover{
color: #9c9c9c;
}
nav.popup_menu ul li a span,
nav.popup_menu ul li h6 span{
display: inline-block;
vertical-align: middle;
}
nav.popup_menu ul li ul li a,
nav.popup_menu ul li ul li h6{
font-size: 14px;
text-transform: none;
}
nav.popup_menu ul li ul li ul li a,
nav.popup_menu ul li ul li ul li h6{
font-size: 0.5em;
line-height: 1em;
}
.popup_menu.medium .popup_menu_inner,
.popup_menu.medium .line,
.popup_menu.medium .line:after, .popup_menu.medium .line:before {
height: 3px;
width: 19px;
}
.popup_menu.medium .line:before{
top: -6px;
}
.popup_menu.medium .line:after {
top: 6px;
}
.popup_menu.large .popup_menu_inner,
.popup_menu.large .line,
.popup_menu.large .line:after, .popup_menu.large .line:before {
height: 4px;
width: 24px;
}
.popup_menu.large .line:before{
top: -8px;
}
.popup_menu.large .line:after {
top: 8px;
}
/* ==========================================================================
Popup menu end styles
========================================================================== */
/* ==========================================================================
Pricing List Shortcode style
========================================================================== */
.qode_pricing_list .qode_pricing_list_holder {
list-style: none;
}
.qode_pricing_list .qode_pricing_list_item {
position: relative;
border-bottom: 1px solid #e7e7e7;
padding: 19px 0;
}
.qode_pricing_list .qode_pricing_item_title {
margin-bottom: 5px;
font-size: 18px;
font-weight: 600;
}
.qode_pricing_list .qode_pricing_item_text {
padding-right: 170px;
}
.qode_pricing_list .qode_pricing_item_price {
position: absolute;
width: 170px;
height: 100%;
text-align: right;
right: 0;
top: 0;
}
.qode_pricing_list .qode_pricing_item_price_inner {
display: table;
height: 100%;
width: 100%;
}
.qode_pricing_list .qode_pricing_item_price_inner span {
display: table-cell;
vertical-align: middle;
font-size: 30px;
color: #303030;
font-weight: 600;
}
/* ==========================================================================
End of Pricing List Shortcode style
========================================================================== */
/* ==========================================================================
Qode Elements Holder style
========================================================================== */
.q_elements_holder{
width: 100%;
display: table;
table-layout: fixed;
}
.q_elements_holder .q_elements_item{
display: table-cell;
vertical-align: middle;
height: 100%;
}
.q_elements_holder .q_elements_item_inner{
width: 100%;
}
.q_elements_holder.two_columns .q_elements_item {
width: 50%;
}
.q_elements_holder.three_columns .q_elements_item {
width: 33.33333333333333%;
}
.q_elements_holder.four_columns .q_elements_item {
width: 25%;
}
/* ==========================================================================
End of Qode Elements Holder style
========================================================================== */
/* ==========================================================================
Start of content with negative margin style
========================================================================== */
.content_top_margin .content .container .container_inner.page_container_inner{
padding: 0px;
}
.content_top_margin .content .container .container_inner .call_to_action{
margin: 0px -15px;
}
.content_top_margin .content .container .container_inner .call_to_action .container_inner{
width: 100%;
}
/* ==========================================================================
End of content with negative margin style
========================================================================== */
/* ==========================================================================
Password protected box styles
========================================================================== */
.post-password-form {
width: 300px;
}
.post-password-form p {
margin-bottom: 20px;
}
.post-password-form input[type='password'] {
width: 100%;
display: block;
margin: 5px 0 20px;
padding: 15px 12px;
border: 0;
outline: 0;
resize: none;
font-size: 13px;
line-height:17px;
background-color:#fff;
color: #818181;
font-family: inherit;
font-weight:400;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.post-password-form input[type='submit'] {
position: relative;
display: inline-block;
width: auto;
height: 39px;
line-height: 39px;
margin: 0;
padding: 0px 23px;
border: 2px solid #303030;
font-size: 13px;
font-weight: 700;
font-family: inherit;
text-align: left;
color: #303030;
text-decoration: none;
cursor: pointer;
white-space: nowrap;
outline: none;
font-style: normal;
text-transform: uppercase;
letter-spacing: 1px;
margin-bottom: 20px;
-o-border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
-ms-border-radius: 4px;
border-radius: 4px;
text-shadow: none;
background-color: transparent;
-webkit-transition: all 0.1s linear;
-moz-transition: all 0.1s linear;
-ms-transition: all 0.1s linear;
-o-transition: all 0.1s linear;
transition: all 0.1s linear;
-webkit-box-sizing: initial !important;
-moz-box-sizing: initial !important;
box-sizing: initial !important;
}
.post-password-form input[type='submit']:hover {
background-color: #1abc9c;
border-color: #1abc9c;
color: #fff;
text-decoration: none;
}
/* ==========================================================================
End of password protected box styles
========================================================================== */
/* ==========================================================================
Full Screen Sections Template
========================================================================== */
.full_screen_holder{
position: relative;
display: block;
z-index: 100;
}
.full_screen_inner{
height: 100%;
position: relative;
/* Touch detection for Windows 8 */
-ms-touch-action: none;
/* IE 11 on Windows Phone 8.1*/
touch-action: none;
visibility: hidden;
}
.fp-section {
position: relative;
-webkit-box-sizing: border-box; /* Safari<=5 Android<=3 */
-moz-box-sizing: border-box; /* <=28 */
box-sizing: border-box;
margin: 0 !important;
}
.fp-slide {
float: left;
}
.fp-section.fp-table,
.fp-slide.fp-table {
display: table;
width: 100%;
}
.fp-tableCell {
display: table-cell;
vertical-align: middle;
width: 100%;
height: 100%;
}
.vertical_menu_enabled .full_screen_holder{
padding-left: 260px;
}
.boxed.vertical_menu_enabled .full_screen_holder{
padding-left: 0;
}
@media only screen and (max-width: 1000px){
.vertical_menu_enabled .full_screen_holder{
padding-left: 0;
}
}
.full_screen_navigation_holder{
position: absolute;
left: 0;
width: 100%;
display: block;
text-align: center;
z-index: 10000;
visibility: hidden;
-webkit-transition: opacity 0.3s ease-in-out;
-moz-transition: opacity 0.3s ease-in-out;
-ms-transition: opacity 0.3s ease-in-out;
-o-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
}
.full_screen_navigation_holder.up_arrow{
top: 30px;
}
.full_screen_navigation_holder.down_arrow,
.full_screen_navigation_holder.side_by_side{
position: fixed;
bottom: 30px;
}
.full_screen_navigation_inner{
position: relative;
display: inline-block;
vertical-align: middle;
}
.full_screen_navigation_inner a{
display: block;
color: #393939;
font-size: 40px;
line-height: 1em;
opacity: 1;
-webkit-transition: opacity 0.3s ease-in-out;
-moz-transition: opacity 0.3s ease-in-out;
-ms-transition: opacity 0.3s ease-in-out;
-o-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
}
.full_screen_navigation_inner a:hover{
opacity: 0.7;
}
.full_screen_navigation_inner i{
font-size: inherit;
color: inherit;
line-height: inherit;
}
.full_screen_preloader{
position: absolute;
height: 1200px;
width: 100%;
display: block;
background-color: #1c1c1c;
z-index: 10001;
}
.full_screen_preloader .ajax_loader{
position: absolute;
display: block;
}
/* ==========================================================================
End of Full Screen Sections Template
========================================================================== */
/* ==========================================================================
Image Gallery slider with no space
========================================================================== */
.qode_image_gallery_no_space {
opacity: 0;
position: relative;
}
.qode_image_gallery_no_space .qode_image_gallery_holder {
overflow: hidden;
position: relative;
width: 100%;
}
.qode_image_gallery_no_space ul {
margin: 0;
overflow: hidden;
padding: 0;
}
.qode_image_gallery_no_space ul li {
float: left;
list-style: none outside none;
margin: 0px;
}
@media only screen and (min-width: 800px) {
.qode_image_gallery_no_space.highlight_active ul li:not(.active) {
opacity: 0.2;
}
.qode_image_gallery_no_space.highlight_active ul li.active{
opacity: 1 !important;
}
.qode_image_gallery_no_space.highlight_active ul li {
-webkit-transition: opacity 0.3s ease-in-out;
-moz-transition: opacity 0.3s ease-in-out;
-ms-transition: opacity 0.3s ease-in-out;
-o-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
}
}
@media only screen and (max-width: 800px) {
.qode_image_gallery_no_space.highlight_active ul li{
opacity: 1 !important;
}
}
.qode_image_gallery_no_space ul li:not(.active) a {
cursor: default;
}
.qode_image_gallery_no_space a.prettyphoto {
display: block;
width: 100%;
height: 100%;
}
.qode_image_gallery_no_space ul li img {
display: block;
position: relative;
}
.qode_image_gallery_no_space .controls {
width: 100%;
}
.qode_image_gallery_no_space .controls a.prev-slide,
.qode_image_gallery_no_space .controls a.next-slide {
vertical-align: middle;
font-size: 30px;
position: absolute;
top: 0;
height: 100%;
width: 10%;
}
.qode_image_gallery_no_space .controls a.prev-slide span,
.qode_image_gallery_no_space .controls a.next-slide span {
margin-top: -27px;
margin-left: -27px;
position: absolute;
left: 50%;
top: 50%;
background-color: transparent;
border: 2px solid #303030;
color: #303030;
cursor: pointer;
display: block;
height: 54px;
line-height: 54px;
text-align: center;
width: 54px;
border-radius: 40px;
-webkit-transition: color .15s ease-in-out, background-color .15s ease-in-out;
-moz-transition: color .15s ease-in-out, background-color .15s ease-in-out;
-ms-transition: color .15s ease-in-out, background-color .15s ease-in-out;
-o-transition: color .15s ease-in-out, background-color .15s ease-in-out;
transition: color .15s ease-in-out, background-color .15s ease-in-out;
}
.qode_image_gallery_no_space .controls a.prev-slide span i,
.qode_image_gallery_no_space .controls a.next-slide span i{
vertical-align: top;
}
.qode_image_gallery_no_space.light .controls a.prev-slide span,
.qode_image_gallery_no_space.light .controls a.next-slide span{
color: #fff;
border-color: #fff;
}
.qode_image_gallery_no_space.dark .controls a.prev-slide span,
.qode_image_gallery_no_space.dark .controls a.next-slide span{
color: #000;
border-color: #000;
}
.qode_image_gallery_no_space .controls a.prev-slide:hover span,
.qode_image_gallery_no_space .controls a.next-slide:hover span{
background-color: #303030;
color: #fff;
}
.qode_image_gallery_no_space.light .controls a.prev-slide:hover span,
.qode_image_gallery_no_space.light .controls a.next-slide:hover span{
background-color: #fff;
color: #8a8a8a;
}
.qode_image_gallery_no_space.dark .controls a.prev-slide:hover span,
.qode_image_gallery_no_space.dark .controls a.next-slide:hover span{
background-color: #000;
color: #fff;
}
.qode_image_gallery_no_space .controls a.next-slide {
right: 20px;
}
@media only screen and (max-width: 800px) {
.qode_image_gallery_no_space .qode_image_gallery_holder {
height: auto !important;
}
.qode_image_gallery_no_space ul {
height: auto !important;
width: 100% !important;
}
.qode_image_gallery_no_space ul li {
float: none;
}
.qode_image_gallery_no_space ul li.-before,
.qode_image_gallery_no_space ul li.-after {
display: none;
}
.qode_image_gallery_no_space ul li div {
height: auto !important;
width: 100% !important;
}
.qode_image_gallery_no_space ul li img {
height: auto;
width: 100%;
}
.qode_image_gallery_no_space .controls { display: none; }
}
/* ==========================================================================
End of Image Gallery slider with no space
========================================================================== */
/* ==========================================================================
Start of Countdown
========================================================================== */
/* jQuery Countdown styles 2.0.0. */
.countdown-rtl {
direction: rtl;
}
.countdown-row {
clear: both;
width: 100%;
padding: 0px 2px;
text-align: center;
}
.countdown-show1 .countdown-section {
width: 98%;
}
.countdown-show2 .countdown-section {
width: 48%;
}
.countdown-show3 .countdown-section {
width: 32.5%;
}
.countdown-show4 .countdown-section {
width: 24.5%;
}
.countdown-show5 .countdown-section {
width: 19.5%;
}
.countdown-show6 .countdown-section {
width: 16.25%;
}
.countdown-show7 .countdown-section {
width: 14%;
}
.countdown{
font-weight: 700;
}
.countdown-section {
display: inline-block;
vertical-align: middle;
text-align: center;
font-weight: inherit;
}
.countdown-amount {
display: block;
position: relative;
font-size: 60px;
line-height: 60px;
margin-bottom: 20px;
color: inherit;
}
/*this span.countdown_separator is added in countdown plugin in plugin.js file */
.countdown_separator{
display: none;
width: 30px;
height: 2px;
background-color: #818181;
margin: 30px 0px;
opacity: 0.3;
}
.countdown.show_separator .countdown_separator{
display: inline-block;
}
.countdown.show_separator .countdown-amount {
margin: 0px;
}
.countdown-period {
display: block;
font-size: 15px;
letter-spacing: 1px;
text-transform: uppercase;
color: inherit;
}
.countdown-descr {
display: block;
width: 100%;
}
@media only screen and (max-width: 1000px){
.countdown-amount {
font-size: 50px !important;
line-height: 50px !important;
}
.countdown-period {
font-size: 15px !important;
}
.countdown_separator {
width: 30px;
}
}
@media only screen and (max-width: 600px){
.countdown-amount {
font-size: 40px !important;
line-height: 40px !important;
margin-bottom: 15px;
}
.countdown-period {
font-size: 12px !important;
}
.countdown_separator {
width: 20px;
margin: 25px 0px 20px 0px;
}
}
@media only screen and (max-width: 600px){
.countdown-amount {
font-size: 35px !important;
line-height: 35px !important;
margin-bottom: 10px;
}
.countdown-period {
font-size: 10px !important;
}
.countdown_separator {
width: 15px;
margin: 20px 0px 15px 0pc;
}
}
/* ==========================================================================
End of Countdown
========================================================================== */
/* ==========================================================================
Start of Vertical Split Screen
========================================================================== */
.vertical_split_slider{
opacity: 0;
position: relative;
margin: 0px -2px;
}
.ms-section {
position: relative;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
background-size: cover;
background-repeat: no-repeat;
padding: 0px 20px;
}
.vertical_split_slider .ms-left .ms-section{
background-position: 100% center !important;
}
.vertical_split_slider .ms-right .ms-section{
background-position: 0 center !important;
}
.ms-section.ms-table{
display: table;
width: 100%;
}
.ms-tableCell {
display: table-cell;
vertical-align: middle;
width: 100%;
height: 100%;
box-sizing: border-box;
}
.ms-easing {
-webkit-transition: all 0.7s ease-out;
-moz-transition: all 0.7s ease-out;
-o-transition: all 0.7s ease-out;
transition: all 0.7s ease-out;
}
#multiscroll-nav {
position: fixed;
z-index: 1000;
margin-top: -32px;
top: 50%;
opacity: 1;
}
#multiscroll-nav.right {
right: 17px;
}
#multiscroll-nav.left {
left: 17px;
}
#multiscroll-nav ul{
margin: 0;
padding: 0;
}
#multiscroll-nav li{
display: block;
width: 8px;
height: 8px;
margin: 13px 7px;
position: relative;
}
#multiscroll-nav li a{
display: block;
position: relative;
z-index: 1;
width: 100%;
height: 100%;
cursor: pointer;
text-decoration: none;
}
#multiscroll-nav li .active span{
background-color: #000;
}
#multiscroll-nav span{
top: 0px;
left: 0px;
width: 8px;
height: 8px;
border: 1px solid #000;
background-color: rgba(0, 0, 0, 0);
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
border-radius: 50%;
position: absolute;
z-index: 1;
}
.multiscroll-tooltip {
position: absolute;
color: #fff;
font-size: 14px;
font-family: arial, helvetica, sans-serif;
top: -2px;
white-space: nowrap;
max-width: 220px;
}
.multiscroll-tooltip.right {
right: 20px;
}
.multiscroll-tooltip.left {
left: 20px;
}
.vertical_split_slider_responsive{
display: none;
}
@media only screen and (max-width: 1000px){
.vertical_split_slider .ms-left {
width: 100% !important;
z-index: 2;
}
.vertical_split_slider .ms-left .ms-section{
background: none !important;
text-align: center !important;
}
.vertical_split_slider .ms-right {
width: 100% !important;
z-index: 1;
}
}
@media only screen and (max-width: 767px){
.vertical_split_screen_initalized body.vss_responsive_adv{
overflow-y: visible !important;
height: auto !important;
}
.vss_responsive_adv .vertical_split_slider,
.vss_responsive_adv #multiscroll-nav {
display: none;
}
.vertical_split_slider_responsive{
display: block;
}
.vss_responsive_adv .ms-section {
background-position: center center;
}
}
/* ==========================================================================
End of Vertical Split Screen
========================================================================== */
/* ==========================================================================
Start of paspartu
========================================================================== */
.paspartu_outer{
padding: 0 2% 0% 2%;
z-index: 99; /* 100 is z-index of footer, so it needs to be smaller in order to prevent minus margin on left and right paspartu */
}
.paspartu_outer:not(.paspartu_on_bottom_fixed){
position: relative;
}
body:not(.paspartu_on_top_fixed) .paspartu_outer .content:not(.has_slider) .content_inner,
.paspartu_on_top_fixed header,
.paspartu_on_top_fixed .fixed_top_header .top_header,
.paspartu_on_top_fixed .paspartu_outer .content_wrapper{
padding-top: 2%;
}
.paspartu_left,
.paspartu_right {
position: absolute;
height: 100%;
width: 2%;
top: 0px;
left: 0px;
background-color: #ffffff;
z-index: 101; /* one more than the Slider */
}
.paspartu_outer:not(.paspartu_on_bottom_fixed):not(.disable_top_paspartu):not(disable_bottom_paspartu) .paspartu_left,
.paspartu_outer:not(.paspartu_on_bottom_fixed):not(.disable_top_paspartu):not(disable_bottom_paspartu) .paspartu_right{
/*margin: -50% 0px; *//* because of the header types when portfolio outer is not from top of window */
height: 200%;
margin: -5% 0;
}
.paspartu_right{
left: auto;
right: 0px;
}
.paspartu_top{
position: fixed;
padding-top: 2%;
height: 0;
width: 100%;
top:0px;
left: 0px;
background-color: #ffffff;
z-index: 200;
}
.paspartu_bottom{
position: relative;
padding-top: 2%;
height: 0;
width: 100%;
background-color: #ffffff;
z-index: 200;
}
.paspartu_on_bottom_fixed .paspartu_bottom{
position: fixed;
bottom:0px;
left: 0px;
}
.paspartu_on_bottom_fixed footer{
margin-bottom: 2%;
}
body.paspartu_on_top_fixed.paspartu_on_bottom_fixed .popup_menu_holder_outer{
padding: 2%;
box-sizing: border-box;
}
.paspartu_enabled #multiscroll-nav.right{
padding-right: 2%;
}
.paspartu_outer .q_slider,
.paspartu_outer .content:not(.has_slider) .content_inner{
background-color: #ffffff;
}
.paspartu_outer:not(.disable_top_paspartu) .carousel-inner,
.paspartu_outer.paspartu_on_bottom_slider .carousel-inner{
position: relative;
height: 100% !important;
}
.paspartu_outer.disable_top_paspartu .content:not(.has_slider) .content_inner{
padding-top: 0 !important;
}
.paspartu_outer.disable_bottom_paspartu,
.paspartu_outer.paspartu_on_bottom_fixed{
padding-bottom: 0 !important;
}
.paspartu_enabled .header_inner{
position: relative; /* for search form that covers header and comes from bottom from header */
}
header.paspartu_header_alignment .header_bottom{
padding: 0px 2%;
}
header.paspartu_header_inside,
.paspartu_enabled.vertical_menu_enabled header{
padding-left: 2%;
padding-right: 2%;
box-sizing: border-box;
}
.paspartu_enabled.paspartu_on_top_fixed .fixed_top_header .qode_search_form_3{
margin-top: 2%;
}
header.paspartu_header_inside.fixed_top_header .top_header,
.paspartu_enabled .vertical_split_slider_preloader,
.paspartu_enabled.paspartu_on_top_fixed .fixed_top_header .qode_search_form_3{
width: 96%;
margin-left: 2%;
margin-right: 2%;
}
.paspartu_enabled .paspartu_outer:not(.disable_top_paspartu) .vertical_split_slider{
margin-top: -2%;
}
.paspartu_enabled .paspartu_outer:not(.disable_bottom_paspartu) .vertical_split_slider{
margin-bottom: -2%;
}
.paspartu_on_top_fixed header{
z-index:202;
}
.paspartu_on_top_fixed:not(.paspartu_on_bottom_fixed) .popup_menu_holder_outer{
z-index:201;
}
.paspartu_enabled.vertical_menu_inside_paspartu aside.vertical_menu_area,
.paspartu_enabled.vertical_menu_inside_paspartu .vertical_area_background,
.paspartu_enabled.vertical_menu_inside_paspartu.vertical_menu_enabled .carousel-inner:not(.relative_position),
.paspartu_enabled.vertical_menu_inside_paspartu .vertical_menu_hidden_button{
margin-left: 2%;
}
.paspartu_enabled.vertical_menu_inside_paspartu.vertical_menu_right aside.vertical_menu_area,
.paspartu_enabled.vertical_menu_inside_paspartu.vertical_menu_right .vertical_area_background,
.paspartu_enabled.vertical_menu_inside_paspartu.vertical_menu_enabled.vertical_menu_right .carousel-inner:not(.relative_position),
.paspartu_enabled.vertical_menu_inside_paspartu.vertical_menu_right .vertical_menu_hidden_button{
margin-left: 0%;
margin-right: 2%;
}
.paspartu_enabled.vertical_menu_inside_paspartu aside.vertical_menu_area,
.paspartu_enabled.vertical_menu_inside_paspartu .vertical_area_background,
.paspartu_enabled.vertical_menu_inside_paspartu .vertical_menu_hidden_button{
margin-top: 2%;
}
.paspartu_enabled.vertical_menu_enabled:not(.vertical_menu_hidden):not(.vertical_menu_transparency) .paspartu_outer:not(.disable_top_paspartu) .carousel-inner:not(.relative_position),
.paspartu_enabled.vertical_menu_enabled:not(.vertical_menu_hidden):not(.vertical_menu_transparency) .paspartu_outer.paspartu_on_bottom_slider .carousel-inner:not(.relative_position),
.paspartu_enabled.vertical_menu_enabled.vertical_menu_width_290:not(.vertical_menu_hidden):not(.vertical_menu_transparency) .paspartu_outer:not(.disable_top_paspartu) .carousel-inner:not(.relative_position),
.paspartu_enabled.vertical_menu_enabled.vertical_menu_width_290:not(.vertical_menu_hidden):not(.vertical_menu_transparency) .paspartu_outer.paspartu_on_bottom_slider .carousel-inner:not(.relative_position),
.paspartu_enabled.vertical_menu_enabled.vertical_menu_width_350:not(.vertical_menu_hidden):not(.vertical_menu_transparency) .paspartu_outer:not(.disable_top_paspartu) .carousel-inner:not(.relative_position),
.paspartu_enabled.vertical_menu_enabled.vertical_menu_width_350:not(.vertical_menu_hidden):not(.vertical_menu_transparency) .paspartu_outer.paspartu_on_bottom_slider .carousel-inner:not(.relative_position),
.paspartu_enabled.vertical_menu_enabled.vertical_menu_width_400:not(.vertical_menu_hidden):not(.vertical_menu_transparency) .paspartu_outer:not(.disable_top_paspartu) .carousel-inner:not(.relative_position),
.paspartu_enabled.vertical_menu_enabled.vertical_menu_width_400:not(.vertical_menu_hidden):not(.vertical_menu_transparency) .paspartu_outer.paspartu_on_bottom_slider .carousel-inner:not(.relative_position),
.paspartu_enabled.vertical_menu_enabled.vertical_menu_hidden .carousel-inner:not(.relative_position){
left: 0px !important;
margin-left: 0% !important;
}
.vertical_menu_enabled.paspartu_on_top_fixed header{
padding: 0px !important;
}
/* outside paspartu - start */
.paspartu_enabled.vertical_menu_outside_paspartu aside.vertical_menu_area{
z-index: 500;
}
body.vertical_menu_outside_paspartu.paspartu_on_top_fixed .paspartu_outer{
padding-top: 2%;
}
body.paspartu_on_top_fixed.vertical_menu_outside_paspartu .paspartu_outer .content .content_inner{
padding-top: 0% !important;
}
@media only screen and (min-width: 1000px) {
.vertical_menu_outside_paspartu .content_wrapper{
margin-left: 2%;
padding-left: 260px;
width: 98%;
}
.vertical_menu_outside_paspartu.vertical_menu_left.vertical_menu_width_290 .content_wrapper{
margin-left: 2%;
padding-left: 290px;
width: 98%;
}
.vertical_menu_outside_paspartu.vertical_menu_left.vertical_menu_width_350 .content_wrapper{
margin-left: 2%;
padding-left: 350px;
width: 98%;
}
.vertical_menu_outside_paspartu.vertical_menu_left.vertical_menu_width_400 .content_wrapper{
margin-left: 2%;
padding-left: 400px;
width: 98%;
}
.vertical_menu_outside_paspartu.vertical_menu_right.vertical_menu_width_290 .content_wrapper{
margin-right: 2%;
padding-right: 290px;
width: 98%;
}
.vertical_menu_outside_paspartu.vertical_menu_right.vertical_menu_width_350 .content_wrapper{
margin-right: 2%;
padding-right: 350px;
width: 98%;
}
.vertical_menu_outside_paspartu.vertical_menu_right.vertical_menu_width_400 .content_wrapper{
margin-right: 2%;
padding-right: 400px;
width: 98%;
}
.vertical_menu_outside_paspartu .paspartu_middle_inner{
padding-left: 260px;
}
.vertical_menu_outside_paspartu .paspartu_left{
left: 260px;
}
.vertical_menu_outside_paspartu.vertical_menu_width_290 .paspartu_middle_inner{
padding-left: 290px;
}
.vertical_menu_outside_paspartu.vertical_menu_width_290 .paspartu_left{
left: 290px;
}
.vertical_menu_outside_paspartu.vertical_menu_width_350 .paspartu_middle_inner{
padding-left: 350px;
}
.vertical_menu_outside_paspartu.vertical_menu_width_350 .paspartu_left{
left: 350px;
}
.vertical_menu_outside_paspartu.vertical_menu_width_400 .paspartu_middle_inner{
padding-left: 400px;
}
.vertical_menu_outside_paspartu.vertical_menu_width_400 .paspartu_left{
left: 400px;
}
.vertical_menu_outside_paspartu.vertical_menu_right.vertical_menu_width_290 .paspartu_middle_inner{
padding-left: 0px;
padding-right: 290px;
}
.vertical_menu_outside_paspartu.vertical_menu_right.vertical_menu_width_290 .paspartu_left{
left: 0px;
}
.vertical_menu_outside_paspartu.vertical_menu_right.vertical_menu_width_290 .paspartu_right{
right: 290px;
}
.vertical_menu_outside_paspartu.vertical_menu_right.vertical_menu_width_350 .paspartu_middle_inner{
padding-left: 0px;
padding-right: 350px;
}
.vertical_menu_outside_paspartu.vertical_menu_right.vertical_menu_width_350 .paspartu_left{
left: 0px;
}
.vertical_menu_outside_paspartu.vertical_menu_right.vertical_menu_width_350 .paspartu_right{
right: 350px;
}
.vertical_menu_outside_paspartu.vertical_menu_right.vertical_menu_width_400 .paspartu_middle_inner{
padding-left: 0px;
padding-right: 400px;
}
.vertical_menu_outside_paspartu.vertical_menu_right.vertical_menu_width_400 .paspartu_left{
left: 0px;
}
.vertical_menu_outside_paspartu.vertical_menu_right.vertical_menu_width_400 .paspartu_right{
right: 400px;
}
body.vertical_menu_outside_paspartu.page-template-blog-masonry-full-width-php.vertical_menu_enabled:not(.vertical_menu_hidden) .content .full_width{
padding-left: 0px;
padding-right:0px;
}
body.vertical_menu_outside_paspartu.page-template-blog-masonry-full-width-php.vertical_menu_enabled.vertical_menu_width_290.vertical_menu_left:not(.vertical_menu_hidden) .content .full_width{
padding-left: 0px;
padding-right:0px;
}
body.vertical_menu_outside_paspartu.page-template-blog-masonry-full-width-php.vertical_menu_enabled.vertical_menu_width_350.vertical_menu_left:not(.vertical_menu_hidden) .content .full_width{
padding-left: 0px;
padding-right:0px;
}
body.vertical_menu_outside_paspartu.page-template-blog-masonry-full-width-php.vertical_menu_enabled.vertical_menu_width_400.vertical_menu_left:not(.vertical_menu_hidden) .content .full_width{
padding-left: 0px;
padding-right:0px;
}
body.vertical_menu_outside_paspartu.page-template-blog-masonry-full-width-php.vertical_menu_enabled.vertical_menu_width_290.vertical_menu_right:not(.vertical_menu_hidden) .content .full_width{
padding-right:0px;
padding-left:0px;
}
body.vertical_menu_outside_paspartu.page-template-blog-masonry-full-width-php.vertical_menu_enabled.vertical_menu_width_350.vertical_menu_right:not(.vertical_menu_hidden) .content .full_width{
padding-right:0px;
padding-left:0px;
}
body.vertical_menu_outside_paspartu.page-template-blog-masonry-full-width-php.vertical_menu_enabled.vertical_menu_width_400.vertical_menu_right:not(.vertical_menu_hidden) .content .full_width{
padding-right:0px;
padding-left:0px;
}
}
.vertical_menu_outside_paspartu.vertical_menu_enabled .q_slider,
.vertical_menu_outside_paspartu.vertical_menu_enabled .full_width,
.vertical_menu_outside_paspartu.vertical_menu_enabled .content .container,
.vertical_menu_outside_paspartu.vertical_menu_enabled .title_outer,
/* .vertical_menu_outside_paspartu.vertical_menu_enabled footer, no need for footer to be excluded*/
.vertical_menu_outside_paspartu.vertical_menu_enabled.vertical_menu_width_350 .q_slider,
.vertical_menu_outside_paspartu.vertical_menu_enabled.vertical_menu_width_350 .full_width,
.vertical_menu_outside_paspartu.vertical_menu_enabled.vertical_menu_width_350 .content .container,
.vertical_menu_outside_paspartu.vertical_menu_enabled.vertical_menu_width_350 .title_outer,
.vertical_menu_outside_paspartu.vertical_menu_enabled.vertical_menu_width_350 footer,
.vertical_menu_outside_paspartu.vertical_menu_enabled.vertical_menu_width_400 .q_slider,
.vertical_menu_outside_paspartu.vertical_menu_enabled.vertical_menu_width_400 .full_width,
.vertical_menu_outside_paspartu.vertical_menu_enabled.vertical_menu_width_400 .content .container,
.vertical_menu_outside_paspartu.vertical_menu_enabled.vertical_menu_width_400 .title_outer,
.vertical_menu_outside_paspartu.vertical_menu_enabled.vertical_menu_width_400 footer,
.vertical_menu_outside_paspartu.vertical_menu_enabled .full_screen_holder,
.vertical_menu_outside_paspartu.vertical_menu_enabled.vertical_menu_width_350 .full_screen_holder,
.vertical_menu_outside_paspartu.vertical_menu_enabled.vertical_menu_width_400 .full_screen_holder{
padding-left: 0px;
padding-right: 0px;
}
.vertical_menu_outside_paspartu.vertical_menu_enabled .q_slider{
padding-top: 0px !important;
}
body.vertical_menu_outside_paspartu.vertical_menu_enabled:not(.vertical_menu_hidden) .ajax_loader,
body.vertical_menu_outside_paspartu.vertical_menu_enabled:not(.vertical_menu_hidden) .ajax_loader,
body.vertical_menu_outside_paspartu.vertical_menu_enabled.vertical_menu_width_290:not(.vertical_menu_hidden) .ajax_loader,
body.vertical_menu_outside_paspartu.vertical_menu_enabled.vertical_menu_width_350:not(.vertical_menu_hidden) .ajax_loader,
body.vertical_menu_outside_paspartu.vertical_menu_enabled.vertical_menu_width_400:not(.vertical_menu_hidden) .ajax_loader,
body.vertical_menu_outside_paspartu.vertical_menu_enabled.vertical_menu_width_290.vertical_menu_right:not(.vertical_menu_hidden) .ajax_loader,
body.vertical_menu_outside_paspartu.vertical_menu_enabled.vertical_menu_width_350.vertical_menu_right:not(.vertical_menu_hidden) .ajax_loader,
body.vertical_menu_outside_paspartu.vertical_menu_enabled.vertical_menu_width_400.vertical_menu_right:not(.vertical_menu_hidden) .ajax_loader,
body.vertical_menu_outside_paspartu.vertical_menu_enabled.vertical_menu_hidden.vertical_menu_right .ajax_loader{
margin-left: 0px;
}
/* outside paspartu - end */
@media only screen and (min-width: 1024px) {
header.paspartu_header_alignment .header_inner_left {
left: 2%;
}
}
@media only screen and (max-width: 1024px) {
.paspartu_outer {
padding: 0 2% 2% 2% !important;
}
body:not(.paspartu_on_top_fixed) .paspartu_outer .content:not(.has_slider) .content_inner,
.paspartu_top,
.paspartu_bottom,
.paspartu_on_top_fixed header,
.paspartu_on_top_fixed .fixed_top_header .top_header,
.paspartu_on_top_fixed .paspartu_outer .content_wrapper{
padding-top: 2% !important;
}
.paspartu_left,
.paspartu_right {
width: 2% !important;
}
.paspartu_on_bottom_fixed footer{
margin-bottom: 2% !important;
}
body.paspartu_on_top_fixed.paspartu_on_bottom_fixed .popup_menu_holder_outer{
padding: 2% !important;
}
.paspartu_enabled #multiscroll-nav.right{
padding-right: 2% !important;
}
header.paspartu_header_alignment .header_bottom {
padding: 0px 2% !important;
}
header.paspartu_header_inside,
.paspartu_enabled.vertical_menu_enabled header{
padding-left: 2% !important;
padding-right: 2% !important;
}
.paspartu_enabled.paspartu_on_top_fixed .fixed_top_header .qode_search_form_3{
margin-top: 2% !important;
}
header.paspartu_header_inside.fixed_top_header .top_header,
.paspartu_enabled .vertical_split_slider_preloader,
.paspartu_enabled.paspartu_on_top_fixed .fixed_top_header .qode_search_form_3{
width: 96% !important;
margin-left: 2% !important;
margin-right: 2% !important;
}
.paspartu_enabled .paspartu_outer:not(.disable_top_paspartu) .vertical_split_slider{
margin-top: -2% !important;
}
.paspartu_enabled .paspartu_outer:not(.disable_bottom_paspartu) .vertical_split_slider{
margin-bottom: -2% !important;
}
.paspartu_enabled.vertical_menu_inside_paspartu aside.vertical_menu_area,
.paspartu_enabled.vertical_menu_inside_paspartu .vertical_area_background,
.paspartu_enabled.vertical_menu_inside_paspartu.vertical_menu_enabled .carousel-inner:not(.relative_position),
.paspartu_enabled.vertical_menu_inside_paspartu .vertical_menu_hidden_button{
margin-left: 2% !important;
}
.paspartu_enabled.vertical_menu_inside_paspartu.vertical_menu_right aside.vertical_menu_area,
.paspartu_enabled.vertical_menu_inside_paspartu.vertical_menu_right .vertical_area_background,
.paspartu_enabled.vertical_menu_inside_paspartu.vertical_menu_enabled.vertical_menu_right .carousel-inner:not(.relative_position),
.paspartu_enabled.vertical_menu_inside_paspartu.vertical_menu_right .vertical_menu_hidden_button{
margin-left: 0% !important;
margin-right: 2% !important;
}
.paspartu_enabled.vertical_menu_inside_paspartu aside.vertical_menu_area,
.paspartu_enabled.vertical_menu_inside_paspartu .vertical_area_background,
.paspartu_enabled.vertical_menu_inside_paspartu .vertical_menu_hidden_button{
margin-top: 2% !important;
}
body.vertical_menu_outside_paspartu.paspartu_on_top_fixed .paspartu_outer{
padding-top: 2% !important;
}
}
/* ==========================================================================
End of paspartu
========================================================================== */
/* ==========================================================================
Visual Composer Grid Elements
============================================================================ */
.vc_grid-container .vc_row.vc_grid .vc_grid-item .vc_btn {
position: relative;
display: inline-block;
width: auto;
height: 39px;
line-height: 39px;
margin: 0;
padding: 0px 23px;
border: 2px solid #303030;
font-size: 13px;
font-weight: 700;
font-family: inherit;
text-align: left;
color: #303030 !important;
text-decoration: none;
cursor: pointer;
white-space: nowrap;
outline: none;
font-style: normal;
text-transform: uppercase;
letter-spacing: 1px;
-o-border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
-ms-border-radius: 4px;
border-radius: 4px;
text-shadow: none;
background-color: transparent;
-webkit-transition: color 0.1s linear, background-color 0.1s linear,border-color 0.1s linear;
-moz-transition: color 0.1s linear, background-color 0.1s linear,border-color 0.1s linear;
-ms-transition: color 0.1s linear, background-color 0.1s linear,border-color 0.1s linear;
-o-transition: color 0.1s linear, background-color 0.1s linear,border-color 0.1s linear;
transition: color 0.1s linear, background-color 0.1s linear,border-color 0.1s linear;
-webkit-box-sizing: initial !important;
-moz-box-sizing: initial !important;
box-sizing: initial !important;
}
.vc_grid-container .vc_row.vc_grid .vc_grid-item .vc_btn:hover {
background-color: #1abc9c;
border-color: #1abc9c;
color: #fff !important;
text-decoration: none;
}
.vc_grid-container .vc_row.vc_grid .vc_pageable-load-more-btn .vc_btn {
position: relative;
display: inline-block;
width: auto;
height: 39px;
line-height: 39px;
margin: 0;
padding: 0px 23px;
border: 2px solid #303030;
font-size: 13px;
font-weight: 700;
font-family: inherit;
text-align: left;
color: #303030 !important;
text-decoration: none;
cursor: pointer;
white-space: nowrap;
outline: none;
font-style: normal;
text-transform: uppercase;
letter-spacing: 1px;
-o-border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
-ms-border-radius: 4px;
border-radius: 4px;
text-shadow: none;
background-color: transparent;
-webkit-transition: color 0.1s linear, background-color 0.1s linear,border-color 0.1s linear;
-moz-transition: color 0.1s linear, background-color 0.1s linear,border-color 0.1s linear;
-ms-transition: color 0.1s linear, background-color 0.1s linear,border-color 0.1s linear;
-o-transition: color 0.1s linear, background-color 0.1s linear,border-color 0.1s linear;
transition: color 0.1s linear, background-color 0.1s linear,border-color 0.1s linear;
-webkit-box-sizing: initial !important;
-moz-box-sizing: initial !important;
box-sizing: initial !important;
}
.vc_grid-container .vc_row.vc_grid .vc_pageable-load-more-btn .vc_btn:hover {
background-color: #1abc9c;
border-color: #1abc9c;
color: #fff !important;
text-decoration: none;
}
/*
.vc_grid-container .vc_grid-pagination .vc_grid-pagination-list > li > a {
position: relative;
color: #303030;
display: inline-block;
width: 38px;
height: 38px;
line-height: 38px;
margin: 0 11px 0 0;
text-align:center;
color: #b4b4b4 !important;
font-size: 18px;
text-decoration: none;
text-transform: uppercase;
cursor: pointer;
white-space: nowrap;
outline: none;
-o-border-radius: 4px !important;
-moz-border-radius: 4px !important;
-webkit-border-radius: 4px !important;
-ms-border-radius: 4px !important;
border-radius: 4px !important;
text-shadow: none;
background-color: transparent !important;
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-ms-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
}
*/
.vc_grid-container .vc_grid.vc_grid-owl-theme .vc_grid-owl-dots.vc_grid-square_dots .vc_grid-owl-dot span {
border: 2px solid #e5e5e5;
background-color: transparent !important;
}
.vc_grid-container .vc_grid.vc_grid-owl-theme .vc_grid-owl-dots.vc_grid-square_dots .vc_grid-owl-dot span:hover {
background-color: #e3e3e3 !important;
border-color: #e3e3e3 !important;
}
.vc_grid-container .vc_grid.vc_grid-owl-theme .vc_grid-owl-dots.vc_grid-square_dots .vc_grid-owl-dot.active span {
background-color: #e3e3e3 !important;
border-color: #e3e3e3 !important;
}
.vc_grid-container .vc_grid.vc_grid-owl-theme .vc_grid-owl-dots.vc_grid-radio_dots .vc_grid-owl-dot span {
border: 2px solid #e5e5e5;
border-radius: 50%;
background-color: transparent !important;
}
.vc_grid-container .vc_grid.vc_grid-owl-theme .vc_grid-owl-dots.vc_grid-radio_dots .vc_grid-owl-dot span:hover {
background-color: #e3e3e3 !important;
border-color: #e3e3e3 !important;
}
.vc_grid-container .vc_grid.vc_grid-owl-theme .vc_grid-owl-dots.vc_grid-radio_dots .vc_grid-owl-dot.active span {
background-color: #e3e3e3 !important;
border-color: #e3e3e3 !important;
}
.vc_grid-container .vc_grid.vc_grid-owl-theme .vc_grid-owl-dots.vc_grid-point_dots .vc_grid-owl-dot span {
background-color: #e3e3e3 !important;
}
.vc_grid-container .vc_grid.vc_grid-owl-theme .vc_grid-owl-dots.vc_grid-fill_square_dots .vc_grid-owl-dot span {
background-color: #e3e3e3 !important;
}
.vc_grid.vc_grid-owl-theme .vc_grid-owl-dots.vc_grid-round_fill_square_dots .vc_grid-owl-dot span {
background-color: #e3e3e3 !important;
}
.vc_grid-container .vc_grid-pagination .vc_grid-pagination-list > li > a {
background-color: transparent !important;
color: #b4b4b4 !important;
-o-border-radius: 4px !important;
-moz-border-radius: 4px !important;
-webkit-border-radius: 4px !important;
-ms-border-radius: 4px !important;
border-radius: 4px !important;
font-size: 18px;
margin: 0 11px 0 0;
text-align:center;
width: 42px;
height: 42px;
text-decoration: none;
text-transform: uppercase;
cursor: pointer;
white-space: nowrap;
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-ms-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
border: 2px solid #e5e5e5;
}
.vc_grid-container .vc_grid-pagination .vc_grid-pagination-list > li > a:hover {
color: #303030 !important;
background-color: #e3e3e3 !important;
border-color: #e3e3e3;
}
.vc_grid-container .vc_grid-pagination .vc_grid-pagination-list > li.vc_grid-active > a {
color: #303030 !important;
background-color: #e3e3e3 !important;
border-color: #e3e3e3;
}
.vc_grid-container .vc_grid-pagination-list.vc_grid-pagination_rounded_light > li > a,
.vc_grid-container .vc_grid-pagination-list.vc_grid-pagination_rounded_dark > li > a,
.vc_grid-container .vc_grid-pagination-list.vc_grid-pagination_rounded > li > a {
border-radius: 30px !important;
}
.vc_grid-container .vc_grid-pagination .vc_grid-pagination-list.vc_grid-pagination_square > li > a,
.vc_grid-container .vc_grid-pagination .vc_grid-pagination-list.vc_grid-pagination_square_light > li > a,
.vc_grid-container .vc_grid-pagination .vc_grid-pagination-list.vc_grid-pagination_square_dark > li > a {
line-height: 38px;
border-radius: 0 !important;
}
.vc_grid-container .vc_grid-pagination .vc_grid-pagination-list.vc_grid-pagination_stripes_dark > li > a,
.vc_grid-container .vc_grid-pagination .vc_grid-pagination-list.vc_grid-pagination_stripes_light > li > a {
width: 22px;
height: 36px;
line-height: 36px;
}
.vc_grid.vc_row.vc_grid-gutter-30px {
margin-bottom: 0 !important;
}
.vc_grid-container .vc_grid-filter.vc_grid-filter-color-grey > .vc_grid-filter-item {
border: none !important;
}
.vc_grid-container .vc_grid-filter.vc_grid-filter-color-grey > .vc_grid-filter-item:hover,
.vc_grid-container .vc_grid-filter.vc_grid-filter-color-grey > .vc_grid-filter-item.vc_active {
background: transparent;
}
/* ==========================================================================
End of Visual Composer Grid Elements
============================================================================ */
/* ==========================================================================
Start of overlapping content
========================================================================== */
.overlapping_content .title_outer{
position: relative;
z-index: 50; /* smaller than the content, so content could be over title */
}
.overlapping_content .content > .container{
background-color: #f8f8f8;
}
.overlapping_content .content .content_inner > .container > .overlapping_content,
.overlapping_content .content .content_inner > .full_width > .full_width_inner{
margin-top: -40px;
position: relative;
z-index: 100; /* greater than the title, so content could be over title */
}
.overlapping_content .title .title_holder .container{
padding-bottom: 40px;
box-sizing: border-box;
}
.overlapping_content .content .content_inner > .container{
text-align: center;
}
.overlapping_content .content .content_inner > .container > .overlapping_content{
display: inline-block;
vertical-align: middle;
margin-right: auto;
margin-left: auto;
padding: 0px 40px;
background-color: #ffffff;
}
.transparent_content.overlapping_content .content .content_inner > .container,
.transparent_content.overlapping_content .content .content_inner > .full_width > .full_width_inner{ /* full_width_inner because of the negative margin on it */
background-color: #ffffff;
}
.overlapping_content .content .content_inner > .container > .overlapping_content .overlapping_content_inner{
overflow: hidden;
text-align: left;
}
.overlapping_content_margin{
margin: 0px -40px;
display: block;
position: relative;
}
@media only screen and (max-width: 1200px) {
.overlapping_content .content .content_inner > .container > .overlapping_content{
padding: 0px 20px !important;
}
.overlapping_content_margin {
margin: 0px -20px !important;
}
}
@media only screen and (max-width: 1000px) {
header .overlapping_content_margin {
margin: 0px !important;
}
}
/* ==========================================================================
End of overlapping content
========================================================================== */
/* ==========================================================================
Start blog with next post on bottom
========================================================================== */
.blog_vertical_loop .full_width_inner{
margin: 0px !important;
}
.blog_vertical_loop article{
position: relative;
vertical-align: middle;
z-index: 1; /*one after another overlapping*/
margin: 0px 0px 140px 0px;
}
.blog_vertical_loop article.move_up{
-webkit-transition: transform 450ms ease 0s;
transition: transform 450ms ease 0s;
}
.blog_vertical_loop article.fade_out {
opacity: 0;
transform: scale(0.8) translate3d(0px, -10%, 0px);
transition: all 450ms ease 0s;
}
.blog_vertical_loop article .post_image{
margin-bottom: 55px !important;
height: 400px;
}
.blog_vertical_loop article .post_image_inner{
height: 100%;
overflow: hidden;
}
.blog_vertical_loop article .post_image_inner a{
position: absolute;
width: 100%;
height: 100%;
top: 0px;
left: 0px;
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
}
.blog_vertical_loop article.previous_post{
position: absolute;
opacity: 0;
transform: scale(0.8) translate3d(0px, -10%, 0px);
}
.blog_vertical_loop article.fade_in {
transition: all 450ms ease 0s;
opacity: 1;
transform: scale(1) translate3d(0px, 0px, 0px);
}
.blog_vertical_loop article.next_post,
.blog_vertical_loop article.next_post .post_content_holder .post_image{
margin: 0px !important;
}
.blog_vertical_loop article.next_post .post_content_holder > .grid_section,
.blog_vertical_loop article.next_post .post_content_holder .post_image > .grid_section{
display: none;
}
.blog_vertical_loop .blog_load_next{
display: none;
position: absolute;
left: 0;
top: -30px;
width: 100%;
}
.blog_vertical_loop article.next_post .blog_load_next{
display: block;
}
.blog_vertical_loop .blog_load_prev{
display: block;
position: absolute;
left: 0;
bottom: -30px;
width: 100%;
}
.blog_vertical_loop article.next_post .blog_load_prev{
display: none;
}
.blog_vertical_loop_button{
text-align: left;
}
.blog_vertical_loop_back_button{
text-align: right;
}
.blog_vertical_loop_button .button_icon a,
.blog_vertical_loop_back_button .button_icon a{
width: 60px;
height: 60px;
background-color: #303030;
display: inline-block;
position: relative;
text-align: center;
border-radius: 50%;
-webkit-transition: background-color 0.15s ease-out;
-moz-transition: background-color 0.15s ease-out;
-ms-transition: background-color 0.15s ease-out;
-o-transition: background-color 0.15s ease-out;
transition: background-color 0.15s ease-out;
}
.blog_vertical_loop_button .button_icon a:before,
.blog_vertical_loop_back_button .button_icon a:before{
content: '3';
font-family: "ElegantIcons";
font-variant: normal;
font-weight: normal;
line-height: 60px;
text-transform: none;
color: #ffffff;
font-size: 22px;
-webkit-transition: color 0.15s ease-out;
-moz-transition: color 0.15s ease-out;
-ms-transition: color 0.15s ease-out;
-o-transition: color 0.15s ease-out;
transition: color 0.15s ease-out;
}
.blog_vertical_loop_back_button .button_icon a:before{
content: 'J';
}
.blog_vertical_loop_button_holder .last_page{
display: none;
}
.blog_vertical_loop article .post_image_title{
opacity: 0;
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
z-index: 10;
display: table;
-webkit-transition: all 0.5s ease 0s ;
transition: all 0.5s ease 0s;
}
.blog_vertical_loop article.next_post .post_image_title{
opacity: 1;
}
.blog_vertical_loop article .post_image_title .post_image_title_inner{
display: table-cell;
vertical-align: middle;
text-align: center;
background-color: rgba(0,0,0,0.6);
}
.blog_vertical_loop article .post_image_title .post_image_title_inner h2{
color: #ffffff;
}
.blog_holder.blog_vertical_loop_type{
position: relative;
}
.blog_holder.blog_vertical_loop_type article:not(.format-quote):not(.format-link) .social_share_list_holder{
margin-top: 15px;
}
.blog_holder.blog_vertical_loop_type .qbutton.loop_more{
margin: 40px 0px 0px 0px;
}
.blog_holder.blog_vertical_loop_type article:not(.format-quote):not(.format-link) .post_text .post_text_inner{
background-color: transparent;
padding: 0;
}
.blog_holder.blog_vertical_loop_type article.format-quote .post_text,
.blog_holder.blog_vertical_loop_type article.format-link .post_text{
margin-bottom: 30px;
}
.blog_holder.blog_vertical_loop_type article .post_text h2{
margin-bottom: 35px;
}
.blog_holder article.blog_vertical_loop_type .post_info{
margin-bottom:8px;
}
.blog_holder.blog_vertical_loop_type article .post_info > span,
.blog_holder.blog_vertical_loop_type article .post_info > div {
padding-right: 20px;
position: relative;
float: left;
}
.blog_holder.blog_vertical_loop_type article .post_info > span:last-child,
.blog_holder.blog_vertical_loop_type article .post_info > div:last-child{
padding-right: 0px;
}
.blog_holder.blog_vertical_loop_type article .post_info > span:after,
.blog_holder.blog_vertical_loop_type article .post_info > div:after {
position: absolute;
right: 5px;
top: 0;
content: "/";
}
.blog_holder.blog_vertical_loop_type article .post_info > span:last-child:after,
.blog_holder.blog_vertical_loop_type article .post_info > div:last-child:after {
content: "";
}
.blog_holder.blog_vertical_loop_type .blog_like a {
line-height: inherit;
}
/* ==========================================================================
End blog with next post on bottom
========================================================================== */
/* ==========================================================================
Start of Parallax Layers
============================================================================ */
.qode_parallax_layers{
width: 100%;
height: 500px;
position: relative;
overflow: hidden;
}
.qode_parallax_layers_holder{
position: relative;
width: 110%;
height: 110%;
top: -5%;
left: -5%;
}
.qode_parallax_layers_holder .image{
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
background-size: cover;
background-position: center center;
transform: translateZ(0px);
-webkit-transform: translateZ(0px);
}
.qode_parallax_layers_holder .paralax_layers_content_holder{
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
}
.qode_parallax_layers_holder .paralax_layers_content{
display: table;
width: 100%;
height: 100%;
}
.qode_parallax_layers_holder .paralax_layers_content_inner{
display: table-cell;
vertical-align: middle;
width: 100%;
height: 100%;
text-align: center;
}
/* ==========================================================================
End of Parallax Layers
============================================================================ */
================================================
FILE: core/jdiameter/api/pom.xml
================================================
4.0.0io.quarkiverse.jdiameterjdiameter-core2.5.1-SNAPSHOT../pom.xmljdiameter-apiQuarkus :: JDiameter Stack :: API
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/Answer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* An Answer message is sent by a recipient of Request once it has received and interpreted the Request. Answers contain
* a Result-Code AVP and other AVPs in message body.
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface Answer extends Message {
/**
* @return ResultCode Avp from message
*/
Avp getResultCode();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/ApplicationAlreadyUseException.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* The ApplicationAlreadyUse signals that the application a user is reporting support for is already in use by someone
* else.
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public class ApplicationAlreadyUseException extends Exception {
private static final long serialVersionUID = 1L;
/**
* Constructor with reason string
*
* @param message reason string
*/
public ApplicationAlreadyUseException(String message) {
super(message);
}
/**
* Constructor with reason string and parent exception
*
* @param message message reason string
* @param cause parent exception
*/
public ApplicationAlreadyUseException(String message, Throwable cause) {
super(message, cause);
}
/**
* Constructor with parent exception
*
* @param cause parent exception
*/
public ApplicationAlreadyUseException(Throwable cause) {
super(cause);
}
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/ApplicationId.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
import java.io.Serial;
import java.io.Serializable;
/**
* The application Id is used to point out an application that is supported or used. It is a combination of
* Authentication application id, Accounting application id and Vendor id.
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
public final class ApplicationId implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* Undefined value of id for application identifier
*/
public static final long UNDEFINED_VALUE = 0x0;
/**
* Standards-track application IDs are by Designated Expert with Specification Required [IANA]
*/
@SuppressWarnings("all") //3rd party lib
public interface Standard {
long DIAMETER_COMMON_MESSAGE = 0x0;
long NASREQ = 0x1;
long MOBILE_IP = 0x2;
long DIAMETER_BASE_ACCOUNTING = 0x3;
long RELAY = 0xffffffff;
}
/**
* IANA [IANA] has assigned the range 0x00000001 to 0x00ffffff for standards-track applications; and 0x01000000 -
* 0xfffffffe for vendor specific applications, on a first-come, first-served basis. The following values are
* allocated.
*/
@SuppressWarnings("all") //3rd party lib
public interface Ranges {
long STANDARDS_TRACK_APPLICATIONS_MIN = 0x00000001;
long STANDARDS_TRACK_APPLICATIONS_MAX = 0x00ffffff;
long VENDOR_SPECIFIC_APPLICATIONS_MIN = 0x01000000;
long VENDOR_SPECIFIC_APPLICATIONS_MAX = 0xfffffffe;
}
private long venId;
private long authId;
private long acctId;
/**
* Create instance of ApplicationId use Authentication-App-Id
*
* @param authAppId authentication application id
* @return instance of class
*/
public static ApplicationId createByAuthAppId(long authAppId) {
return new ApplicationId(UNDEFINED_VALUE, authAppId, UNDEFINED_VALUE);
}
/**
* Create instance of ApplicationId use Accounting-Applicaion-Id
*
* @param acchAppId accounting applicaion Id
* @return instance of class
*/
public static ApplicationId createByAccAppId(long acchAppId) {
return new ApplicationId(UNDEFINED_VALUE, UNDEFINED_VALUE, acchAppId);
}
/**
* Create instance of ApplicationId use Authentication-App-Id and Vendor-Id
*
* @param vendorId vendor specific id
* @param authAppId authentication application id
* @return instance of class
*/
public static ApplicationId createByAuthAppId(long vendorId, long authAppId) {
return new ApplicationId(vendorId, authAppId, UNDEFINED_VALUE);
}
/**
* Create instance of ApplicationId use Accounting-Applicaion-Id and Vendor-Id
*
* @param vendorId vendor specific id
* @param acchAppId accounting applicaion Id
* @return instance of class
*/
public static ApplicationId createByAccAppId(long vendorId, long acchAppId) {
return new ApplicationId(vendorId, UNDEFINED_VALUE, acchAppId);
}
/**
* Create instance
*
* @param vendorId vendor specific id
* @param authAppId authentication application id
* @param acctAppId accounting applicaion Id
*/
private ApplicationId(long vendorId, long authAppId, long acctAppId) {
this.authId = authAppId;
this.acctId = acctAppId;
this.venId = vendorId;
}
/**
* @return Vendor-Isd
*/
public long getVendorId() {
return venId;
}
/**
* @return Authentication-Application-Id
*/
public long getAuthAppId() {
return authId;
}
/**
* @return Accounting-Application-Id
*/
public long getAcctAppId() {
return acctId;
}
/**
* @param obj check object
* @return true if check object equals current instance (all appId is equals)
*/
@Override
public boolean equals(Object obj) {
if (obj instanceof ApplicationId) {
ApplicationId appId = (ApplicationId) obj;
return authId == appId.authId &&
acctId == appId.acctId &&
venId == appId.venId;
} else {
return false;
}
}
/**
* @return hash code of object
*/
@Override
public int hashCode() {
int result;
result = (int) (venId ^ (venId >>> 32));
result = 31 * result + (int) (authId ^ (authId >>> 32));
result = 31 * result + (int) (acctId ^ (acctId >>> 32));
return result;
}
/**
* @return String representation of object
*/
@Override
public String toString() {
return new StringBuffer("AppId [").append("Vendor-Id:").append(venId).append("; Auth-Id:").append(authId)
.append("; Acct-Id:").append(acctId).append("]").toString();
}
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/Avp.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
import java.io.Serializable;
import java.net.InetAddress;
import java.util.Date;
/**
* The Avp class implements a Diameter AVP. This class allows applications to build and read arbitrary Diameter AVP
* objects. Wrapper interface allows adapt message to any driver vendor specific interface Serializable interface allows
* use this class in SLEE Event objects
*
* @author erick.svenson@yahoo.com
* @author artem.litvinov@gmail.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface Avp extends Wrapper, Serializable {
/**
* The Accounting-Realtime-Required AVP code
*/
int ACCOUNTING_REALTIME_REQUIRED = 483;
/**
* The Auth-Request-Type AVP code
*/
int AUTH_REQUEST_TYPE = 274;
/**
* The Authorization-Lifetime AVP code
*/
int AUTHORIZATION_LIFETIME = 291;
/**
* The Auth-Grace-Period AVP code
*/
int AUTH_GRACE_PERIOD = 276;
/**
* The Auth-Session-State AVP code
*/
int AUTH_SESSION_STATE = 277;
/**
* The Class AVP code
*/
int CLASS = 25;
/**
* The E2E-Sequence-Avp AVP code
*/
int E2E_SEQUENCE_AVP = 300;
/**
* The Error-reporting-host AVP code
*/
int ERROR_REPORTING_HOST = 294;
/**
* The Event-Timestamp AVP code
*/
int EVENT_TIMESTAMP = 55;
/**
* The File-Avp AVP code
*/
int FAILED_AVP = 279;
/**
* The Acct-Interim-Interval AVP code
*/
int ACCT_INTERIM_INTERVAL = 85;
/**
* The User-Name AVP code
*/
int USER_NAME = 1;
/**
* The Result-Code AVP code
*/
int RESULT_CODE = 268;
/**
* Experimental-Result AVP code
*/
int EXPERIMENTAL_RESULT = 297;
/**
* The Experimental-Result-Code AVP code
*/
int EXPERIMENTAL_RESULT_CODE = 298;
/**
* The Termination-Cause AVP code
*/
int TERMINATION_CAUSE = 295;
/**
* The FirmWare-Revision AVP code
*/
int FIRMWARE_REVISION = 267;
/**
* The Host-IP-Address AVP code
*/
int HOST_IP_ADDRESS = 257;
/**
* The Muti-Round-Timeout AVP code
*/
int MULTI_ROUND_TIMEOUT = 272;
/**
* The Origin-Host AVP code
*/
int ORIGIN_HOST = 264;
/**
* The Origin-Realm AVP code
*/
int ORIGIN_REALM = 296;
/**
* The Origin-State-Id AVP code
*/
int ORIGIN_STATE_ID = 278;
/**
* The Redirect-Host AVP code
*/
int REDIRECT_HOST = 292;
/**
* The Redirect-Host-Usage AVP code
*/
int REDIRECT_HOST_USAGE = 261;
/**
* The Redirect-Max-Cache-Time AVP code
*/
int REDIRECT_MAX_CACHE_TIME = 262;
/**
* The Product-Name AVP code
*/
int PRODUCT_NAME = 269;
/**
* The Session-Id AVP code
*/
int SESSION_ID = 263;
/**
* The Session-Timeout AVP code
*/
int SESSION_TIMEOUT = 27;
/**
* The Session-Binding AVP code
*/
int SESSION_BINDING = 270;
/**
* The Session-Server-Failover AVP code
*/
int SESSION_SERVER_FAILOVER = 271;
/**
* The Destination-Host AVP code
*/
int DESTINATION_HOST = 293;
/**
* The Destination-Realm AVP code
*/
int DESTINATION_REALM = 283;
/**
* The Route-Record AVP code
*/
int ROUTE_RECORD = 282;
/**
* The Proxy-Info AVP code
*/
int PROXY_INFO = 284;
/**
* The Proxy-Host AVP code
*/
int PROXY_HOST = 280;
/**
* The Proxy-State AVP code
*/
int PROXY_STATE = 33;
/**
* The Authentication-Application-Id AVP code
*/
int AUTH_APPLICATION_ID = 258;
/**
* The Accounting-Application-Id AVP code
*/
int ACCT_APPLICATION_ID = 259;
/**
* The Inband-Security-Id AVP code
*/
int INBAND_SECURITY_ID = 299;
/**
* The Vendor-Id AVP code
*/
int VENDOR_ID = 266;
/**
* The Supported-Vendor-Id AVP code
*/
int SUPPORTED_VENDOR_ID = 265;
/**
* The Vendor-Specific-Application-Id AVP code
*/
int VENDOR_SPECIFIC_APPLICATION_ID = 260;
/**
* The Re-Authentication-Request-type AVP code
*/
int RE_AUTH_REQUEST_TYPE = 285;
/**
* The Accounting-Record-Type AVP code
*/
int ACC_RECORD_TYPE = 480;
/**
* The Accounting-Record-Number AVP code
*/
int ACC_RECORD_NUMBER = 485;
/**
* The Accounting-Session-Id AVP code
*/
int ACC_SESSION_ID = 44;
/**
* The Accounting-Sub-Session-Id AVP code
*/
int ACC_SUB_SESSION_ID = 287;
/**
* The Accounting-Multi-Session-Id AVP code
*/
int ACC_MULTI_SESSION_ID = 50;
/**
* The Disconnect cause AVP code
*/
int DISCONNECT_CAUSE = 273;
/**
* The Error-Message AVP code
*/
int ERROR_MESSAGE = 281;
// RFC 4006 (Credit-Control-Application) AVPs
/**
* CCA (RFC4006) Correlation ID AVP code
*/
int CC_CORRELATION_ID = 411;
/**
* CCA (RFC4006) Credit Control Input Octets AVP code
*/
int CC_INPUT_OCTETS = 412;
/**
* CCA (RFC4006) Credit Control Money AVP code
*/
int CC_MONEY = 413;
/**
* CCA (RFC4006) Credit Control Output Octets AVP code
*/
int CC_OUTPUT_OCTETS = 414;
/**
* CCA (RFC4006) Credit Control Request Number AVP code
*/
int CC_REQUEST_NUMBER = 415;
/**
* CCA (RFC4006) Request Type AVP code
*/
int CC_REQUEST_TYPE = 416;
/**
* CCA (RFC4006) Credit Control Service Specific Units AVP code
*/
int CC_SERVICE_SPECIFIC_UNITS = 417;
/**
* CCA (RFC4006) Credit Control Session Failover AVP code
*/
int CC_SESSION_FAILOVER = 418;
/**
* CCA (RFC4006) Credit Control Sub Session ID AVP code
*/
int CC_SUB_SESSION_ID = 419;
/**
* CCA (RFC4006) Credit Control Time AVP code
*/
int CC_TIME = 420;
/**
* CCA (RFC4006) Credit Control Total Octets AVP code
*/
int CC_TOTAL_OCTETS = 421;
/**
* CCA (RFC4006) Credit Control Unit Type AVP code
*/
int CC_UNIT_TYPE = 454;
/**
* CCA (RFC4006) Check Balance result AVP code
*/
int CHECK_BALANCE_RESULT = 422;
/**
* CCA (RFC4006) Cost Information AVP code
*/
int COST_INFORMATION = 423;
/**
* CCA (RFC4006) Cost Unit AVP code
*/
int COST_UNIT = 424;
/**
* CCA (RFC4006) Currency Code AVP code
*/
int CURRENCY_CODE = 425;
/**
* CCA (RFC4006) Credit Control AVP code
*/
int CREDIT_CONTROL = 426;
/**
* CCA (RFC4006) Credit Control Failure Handling AVP code
*/
int CREDIT_CONTROL_FAILURE_HANDLING = 427;
/**
* CCA (RFC4006) Direct Debiting Failure Handling AVP code
*/
int DIRECT_DEBITING_FAILURE_HANDLING = 428;
/**
* CCA (RFC4006) Exponent AVP code
*/
int EXPONENT = 429;
/**
* CCA (RFC4006) Final Unit Action AVP code
*/
int FINAL_UNIT_ACTION = 449;
/**
* CCA (RFC4006) Final Unit Indication AVP code
*/
int FINAL_UNIT_INDICATION = 430;
/**
* CCA (RFC4006) Granted Service Unit AVP code
*/
int GRANTED_SERVICE_UNIT = 431;
/**
* CCA (RFC4006) GSU Pool Identifier AVP code
*/
int GSU_POOL_ID = 453;
/**
* CCA (RFC4006) GSU Pool Reference AVP code
*/
int GSU_POOL_REFERENCE = 457;
/**
* CCA (RFC4006) Multiple Services Credit Control AVP code
*/
int MULTIPLE_SERVICES_CREDIT_CONTROL = 456;
/**
* CCA (RFC4006) Multiple Services Indicator AVP code
*/
int MULTIPLE_SERVICES_INDICATOR = 455;
/**
* CCA (RFC4006) Rating Group AVP code
*/
int RATING_GROUP = 432;
/**
* CCA (RFC4006) Redirect Address Type AVP code
*/
int REDIRECT_ADDRESS_TYPE = 433;
/**
* CCA (RFC4006) Redirect Server AVP code
*/
int REDIRECT_SERVER = 434;
/**
* CCA (RFC4006) Redirect Address AVP code
*/
int REDIRECT_ADDRESS = 435;
/**
* CCA (RFC4006) Requested Action AVP code
*/
int REQUESTED_ACTION = 436;
/**
* CCA (RFC4006) Requested Service Unit AVP code
*/
int REQUESTED_SERVICE_UNIT = 437;
/**
* CCA (RFC4006) Restriction Filter Rule AVP code
*/
int RESTRICTION_FILTER_RULE = 438;
/**
* CCA (RFC4006) Service Context Id AVP code
*/
int SERVICE_CONTEXT_ID = 461;
/**
* CCA (RFC4006) Service Id AVP code
*/
int SERVICE_IDENTIFIER_CCA = 439;
/**
* CCA (RFC4006) Service Parameter Info AVP code
*/
int SERVICE_PARAMETER_INFO = 440;
/**
* CCA (RFC4006) Service Parameter Type AVP code
*/
int SERVICE_PARAMETER_TYPE = 441;
/**
* CCA (RFC4006) Service Parameter Value AVP code
*/
int SERVICE_PARAMETER_VALUE = 442;
/**
* CCA (RFC4006) Subscription Id AVP code
*/
int SUBSCRIPTION_ID = 443;
/**
* CCA (RFC4006) Subscription Id Data AVP code
*/
int SUBSCRIPTION_ID_DATA = 444;
/**
* CCA (RFC4006) Subscription Id Type AVP code
*/
int SUBSCRIPTION_ID_TYPE = 450;
/**
* CCA (RFC4006) Tariff Change Usage AVP code
*/
int TARIFF_CHANGE_USAGE = 452;
/**
* CCA (RFC4006) Tariff Time Change AVP code
*/
int TARIFF_TIME_CHANGE = 451;
/**
* CCA (RFC4006) Unit Value AVP code
*/
int UNIT_VALUE = 445;
/**
* CCA (RFC4006) Used Service Unit AVP code
*/
int USED_SERVICE_UNIT = 446;
/**
* CCA (RFC4006) User Equipment Info AVP code
*/
int USER_EQUIPMENT_INFO = 458;
/**
* CCA (RFC4006) User Equipment Info Type AVP code
*/
int USER_EQUIPMENT_INFO_TYPE = 459;
/**
* CCA (RFC4006) User Equipment Info Value AVP code
*/
int USER_EQUIPMENT_INFO_VALUE = 460;
/**
* CCA (RFC4006) Value Digits AVP code
*/
int VALUE_DIGITS = 447;
/**
* CCA (RFC4006) Validity Time AVP code
*/
int VALIDITY_TIME = 448;
// Cx/Dx IMS Interface AVPs
/**
* Cx/Dx (3GPP TS 29.229) Visited Network Identifier AVP code
*/
int VISITED_NETWORK_ID = 600;
/**
* Cx/Dx (3GPP TS 29.229) Public Identity AVP code
*/
int PUBLIC_IDENTITY = 601;
/**
* Cx/Dx (3GPP TS 29.229) Server Name AVP code
*/
int SERVER_NAME = 602;
/**
* Cx/Dx (3GPP TS 29.229) Server Capabilities AVP code
*/
int SERVER_CAPABILITIES = 603;
/**
* Cx/Dx (3GPP TS 29.229) Mandatory Capability AVP code
*/
int MANDATORY_CAPABILITY = 604;
/**
* Cx/Dx (3GPP TS 29.229) Optional Capability AVP code
*/
int OPTIONAL_CAPABILITY = 605;
/**
* Cx/Dx (3GPP TS 29.229) UserData AVP code
*/
int USER_DATA_CXDX = 606; // why the hell there is double def, is 3GPP sane?
/**
* Cx/Dx (3GPP TS 29.229) SIP Number Auth Items AVP code
*/
int SIP_NUMBER_AUTH_ITEMS = 607;
/**
* Cx/Dx (3GPP TS 29.229) SIP Authentication Scheme AVP code
*/
int SIP_AUTHENTICATION_SCHEME = 608;
/**
* Cx/Dx (3GPP TS 29.229) SIP Authenticate AVP code
*/
int SIP_AUTHENTICATE = 609;
/**
* Cx/Dx (3GPP TS 29.229) SIP Authorization AVP code
*/
int SIP_AUTHORIZATION = 610;
/**
* Cx/Dx (3GPP TS 29.229) SIP Authentication Context AVP code
*/
int SIP_AUTHENTICATION_CONTEXT = 611;
/**
* Cx/Dx (3GPP TS 29.229) SIP Auth Data Item AVP code
*/
int SIP_AUTH_DATA_ITEM = 612;
/**
* Cx/Dx (3GPP TS 29.229) SIP Item Number AVP code
*/
int SIP_ITEM_NUMBER = 613;
/**
* Cx/Dx (3GPP TS 29.229) Server Assignment Type AVP code
*/
int SERVER_ASSIGNMENT_TYPE = 614;
/**
* Cx/Dx (3GPP TS 29.229) Deregistration Reason AVP code
*/
int DEREGISTRATION_REASON = 615;
/**
* Cx/Dx (3GPP TS 29.229) Reason Code AVP code
*/
int REASON_CODE = 616;
/**
* Cx/Dx (3GPP TS 29.229) Reason Info AVP code
*/
int REASON_INFO = 617;
/**
* Cx/Dx (3GPP TS 29.229) Charging Information AVP code
*/
int CHARGING_INFORMATION = 618;
/**
* Cx/Dx (3GPP TS 29.229) Primary Event Charging Function Name AVP code
*/
int PRI_EVENT_CHARGING_FUNCTION = 619;
/**
* Cx/Dx (3GPP TS 29.229) Secondary Event Charging Function Name AVP code
*/
int SEC_EVENT_CHARGING_FUNCTION = 620;
/**
* Cx/Dx (3GPP TS 29.229) Primary Charging Collection Function Name AVP code
*/
int PRI_CHARGING_COLLECTION_FUNCTION = 621;
/**
* Cx/Dx (3GPP TS 29.229) Secondary Charging Collection Function Name AVP code
*/
int SEC_CHARGING_COLLECTION_FUNCTION = 622;
/**
* Cx/Dx (3GPP TS 29.229) User Authorization Type AVP code
*/
int USER_AUTORIZATION_TYPE = 623;
/**
* Cx/Dx (3GPP TS 29.229) User Data Already Available AVP code
*/
int USER_DATA_ALREADY_AVAILABLE = 624;
/**
* Cx/Dx (3GPP TS 29.229) Confidentiality Key AVP code
*/
int CONFIDENTIALITY_KEY = 625;
/**
* Cx/Dx (3GPP TS 29.229) Integrity Key AVP code
*/
int INTEGRITY_KEY = 626;
/**
* Supported Features AVP code
*/
int SUPPORTED_FEATURES = 628;
/**
* Cx/Dx (3GPP TS 29.229) Feature List ID AVP code
*/
int FEATURE_LIST_ID = 629;
/**
* Cx/Dx (3GPP TS 29.229) Feature List AVP code
*/
int FEATURE_LIST = 630;
/**
* Cx/Dx (3GPP TS 29.229) Supported Applications AVP code
*/
int SUPPORTED_APPLICATIONS = 631;
/**
* Cx/Dx (3GPP TS 29.229) Associated Identities AVP code
*/
int ASSOCAITED_IDENTITIES = 632;
/**
* Cx/Dx (3GPP TS 29.229) originating Request AVP code
*/
int ORIGINATING_REQUEST = 633;
/**
* Wildcarded PSI AVP code
*/
int WILDCARDED_PSI = 634;
/**
* Cx/Dx (3GPP TS 29.229) SIP Digest Authenticate AVP code
*/
int SIP_DIGEST_AUTHENTICATE = 635;
/**
* Wildcarded IMPU AVP code
*/
int WILDCARDED_IMPU = 636;
/**
* Cx/Dx (3GPP TS 29.229) UAR Flags AVP code
*/
int UAR_FLAGS = 637;
/**
* Cx/Dx (3GPP TS 29.229) Loose Route Indication AVP code
*/
int LOOSE_ROUTE_INDICATION = 638;
/**
* Cx/Dx (3GPP TS 29.229) SCSCF Restoration Info AVP code
*/
int SCSCF_RESTORATION_INFO = 639;
/**
* Cx/Dx (3GPP TS 29.229) Path AVP code
*/
int PATH = 640;
/**
* Cx/Dx (3GPP TS 29.229) Contact AVP code
*/
int CONTACT = 641;
/**
* Cx/Dx (3GPP TS 29.229) Subscription Info AVP code
*/
int SUBSCRIPTION_INFO = 642;
/**
* Cx/Dx (3GPP TS 29.229) Call ID SIP Header AVP code
*/
int CALL_ID_SIP_HEADER = 643;
/**
* Cx/Dx (3GPP TS 29.229) From SIP Header AVP code
*/
int FROM_SIP_HEADER = 644;
/**
* Cx/Dx (3GPP TS 29.229) To SIP Header AVP code
*/
int TO_SIP_HEADER = 645;
/**
* Cx/Dx (3GPP TS 29.229) Record Route AVP code
*/
int RECORD_ROUTE = 646;
/**
* Cx/Dx (3GPP TS 29.229) Associated Registered Identities AVP code
*/
int ASSOCIATED_REGISTERED_IDENTITIES = 647;
/**
* Cx/Dx (3GPP TS 29.229) Multiple Registration Indication AVP code
*/
int MULTIPLE_REGISTRATION_INDICATION = 648;
/**
* Cx/Dx (3GPP TS 29.229) Restoration Info AVP code
*/
int RESTORATION_INFO = 649;
// Sh IMS Interface AVPs
/**
* Sh (3GPP TS 29.329) User Identity AVP code
*/
int USER_IDENTITY = 700;
/**
* Sh (3GPP TS 29.329) User Data AVP code
*/
int USER_DATA_SH = 702;
/**
* Sh (3GPP TS 29.329) Data Reference AVP code
*/
int DATA_REFERENCE = 703;
/**
* Sh (3GPP TS 29.329) Service Indication AVP code
*/
int SERVICE_INDICATION = 704;
/**
* Sh (3GPP TS 29.329) Subs Req Type AVP code
*/
int SUBS_REQ_TYPE = 705;
/**
* Sh (3GPP TS 29.329) Requested Domain AVP code
*/
int REQUESTED_DOMAIN = 706;
/**
* Sh (3GPP TS 29.329) Current Location AVP code
*/
int CURRENT_LOCATION = 707;
/**
* Sh (3GPP TS 29.329) identity Set AVP code
*/
int IDENTITY_SET = 708;
/**
* Sh (3GPP TS 29.329) Expiry Time AVP code
*/
int EXPIRY_TIME = 709;
/**
* Sh (3GPP TS 29.329) Send Data Indication AVP code
*/
int SEND_DATA_INDICATION = 710;
/**
* Sh (3GPP TS 29.329) DSAI Tag AVP code
*/
int DSAI_TAG = 711;
// Ro/Rf IMS Interfaces AVPs
/**
* Ro/Rf (3GPP TS 32.299) Low Balance Indication AVP code
*/
int LOW_BALANCE_INDICATION = 2020;
/**
* Ro/Rf (3GPP TS 32.299) 3GPP Charging Characteristics AVP code
*/
int TGPP_CHARGING_CHARACTERISTICS = 13;
/**
* Ro/Rf (3GPP TS 32.299) 3GPP Charging Id AVP code
*/
int TGPP_CHARGING_ID = 2;
/**
* Ro/Rf (3GPP TS 32.299) 3GPP GGSN MCC MNC AVP code
*/
int TGPP_GGSN_MCC_MNC = 9;
/**
* Ro/Rf (3GPP TS 32.299) 3GPP IMSI AVP code
*/
int TGPP_IMSI = 1;
/**
* Ro/Rf (3GPP TS 32.299) 3GPP IMSI MCC MNC AVP code
*/
int TGPP_IMSI_MCC_MNC = 8;
/**
* Ro/Rf (3GPP TS 32.299) 3GPP MS TimeZone AVP code
*/
int TGPP_MS_TIMEZONE = 23;
/**
* Ro/Rf (3GPP TS 32.299) 3GPP NSAPI AVP code
*/
int TGPP_NSAPI = 10;
/**
* Ro/Rf (3GPP TS 32.299) 3GPP PDP Type AVP code
*/
int TGPP_PDP_TYPE = 3;
/**
* Ro/Rf (3GPP TS 32.299) 3GPP RAT Type AVP code
*/
int TGPP_RAT_TYPE = 21;
/**
* Ro/Rf (3GPP TS 32.299) 3GPP Selection Mode AVP code
*/
int TGPP_SELECTION_MODE = 12;
/**
* Ro/Rf (3GPP TS 32.299) 3GPP Session Stop Indicator AVP code
*/
int TGPP_SESSION_STOP_INDICATOR = 11;
/**
* Ro/Rf (3GPP TS 32.299) 3GPP SGSN MCC MNC AVP code
*/
int GPP_SGSN_MCC_MNC = 18;
/**
* Ro/Rf (3GPP TS 32.299) 3GPP User Location Info AVP code
*/
int GPP_USER_LOCATION_INFO = 22;
/**
* Ro/Rf (3GPP TS 32.299) 3GPP2 BSID AVP code
*/
int TGPP2_BSID = 5535;
/**
* Ro/Rf (3GPP TS 32.299) Access Network Charging Identifier Value AVP code
*/
int ACCESS_NETWORK_CHARGING_IDENTIFIER_VALUE = 503;
/**
* Ro/Rf (3GPP TS 32.299) Access Network Information AVP code
*/
int ACCESS_NETWORK_INFORMATION = 1263;
/**
* Ro/Rf (3GPP TS 32.299) Accumulated Cost AVP code
*/
int ACCUMULATED_COST = 2052;
/**
* Ro/Rf (3GPP TS 32.299) Adaptations AVP code
*/
int ADAPTATIONS = 1217;
/**
* Ro/Rf (3GPP TS 32.299) Additional Content Information AVP code
*/
int ADDITIONAL_CONTENT_INFORMATION = 1207;
/**
* Ro/Rf (3GPP TS 32.299) Additional Type Information AVP code
*/
int ADDITIONAL_TYPE_INFORMATION = 1205;
/**
* Ro/Rf (3GPP TS 32.299) Address Data AVP code
*/
int ADDRESS_DATA = 897;
/**
* Ro/Rf (3GPP TS 32.299) Address Domain AVP code
*/
int ADDRESS_DOMAIN = 898;
/**
* Ro/Rf (3GPP TS 32.299) Addressee Type AVP code
*/
int ADDRESSEE_TYPE = 1208;
/**
* Ro/Rf (3GPP TS 32.299) Address Type AVP code
*/
int ADDRESS_TYPE = 899;
/**
* Ro/Rf (3GPP TS 32.299) AF Charging Identifier AVP code
*/
int AF_CHARGING_IDENTIFIER = 505;
/**
* Ro/Rf (3GPP TS 32.299) AF Correlation Information AVP code
*/
int AF_CORRELATION_INFORMATION = 1276;
/**
* Ro/Rf (3GPP TS 32.299) Allocation Retention Priority AVP code
*/
int ALLOCATION_RETENTION_PRIORITY = 1034;
/**
* Ro/Rf (3GPP TS 32.299) Alternate Charged Party Address AVP code
*/
int ALTERNATE_CHARGED_PARTY_ADDRESS = 1280;
/**
* Gx/Gxx (3GPP TS 29.212) APN aggregate max bitrate DL AVP code
*/
int APN_AGGREGATE_MAX_BITRATE_DL = 1040;
/**
* Gx/Gxx (3GPP TS 29.212) APN aggregate max bitrate UL AVP code
*/
int APN_AGGREGATE_MAX_BITRATE_UL = 1041;
/**
* Ro/Rf (3GPP TS 32.299) AoC Cost Information AVP code
*/
int AOC_COST_INFORMATION = 2053;
/**
* Ro/Rf (3GPP TS 32.299) AoC Information AVP code
*/
int AOC_INFORMATION = 2054;
/**
* Ro/Rf (3GPP TS 32.299) AoC Request Type AVP code
*/
int AOC_REQUEST_TYPE = 2055;
/**
* Ro/Rf (3GPP TS 32.299) Application provided called party address AVP code
*/
int APPLICATION_PROVIDED_CALLED_PARTY_ADDRESS = 837;
/**
* Ro/Rf (3GPP TS 32.299) Application Server AVP code
*/
int APPLICATION_SERVER = 836;
/**
* Ro/Rf (3GPP TS 32.299) Application Server ID AVP code
*/
int APPLICATION_SERVER_ID = 2101;
/**
* Ro/Rf (3GPP TS 32.299) Application Server Information AVP code
*/
int APPLICATION_SERVER_INFORMATION = 850;
/**
* Ro/Rf (3GPP TS 32.299) Application Service Type AVP code
*/
int APPLICATION_SERVICE_TYPE = 2102;
/**
* Ro/Rf (3GPP TS 32.299) Application Session ID AVP code
*/
int APPLICATION_SESSION_ID = 2103;
/**
* Ro/Rf (3GPP TS 32.299) Applic ID AVP code
*/
int APPLIC_ID = 1218;
/**
* Ro/Rf (3GPP TS 32.299) Associated Party Address AVP code
*/
int ASSOCIATED_PARTY_ADDRESS = 2035;
/**
* Ro/Rf (3GPP TS 32.299) Associated URI AVP code
*/
int ASSOCIATED_URI = 856;
/**
* Ro/Rf (3GPP TS 32.299) Authorized QoS AVP code
*/
int AUTHORIZED_QOS = 849;
/**
* Ro/Rf (3GPP TS 32.299) Aux Applic Info AVP code
*/
int AUX_APPLIC_INFO = 1219;
/**
* Ro/Rf (3GPP TS 32.299) Base Time Interval AVP code
*/
int BASE_TIME_INTERVAL = 1265;
/**
* Gx/Gxx (3GPP TS 29.212) Bearer Identifier AVP code
*/
int BEARER_IDENTIFIER = 1020;
/**
* Ro/Rf (3GPP TS 32.299) Bearer Service AVP code
*/
int BEARER_SERVICE = 854;
/**
* Ro/Rf (3GPP TS 32.299) Called Asserted Identity AVP code
*/
int CALLED_ASSERTED_IDENTITY = 1250;
/**
* Ro/Rf (3GPP TS 32.299) Called Party Address AVP code
*/
int CALLED_PARTY_ADDRESS = 832;
int CALLED_STATION_ID = 30;
/**
* Ro/Rf (3GPP TS 32.299) Calling Party Address AVP code
*/
int CALLING_PARTY_ADDRESS = 831;
/**
* Ro/Rf (3GPP TS 32.299) Carrier Select Routing Information AVP code
*/
int CARRIER_SELECT_ROUTING_INFORMATION = 2023;
/**
* Ro/Rf (3GPP TS 32.299) Cause Code AVP code
*/
int CAUSE_CODE = 861;
/**
* Ro/Rf (3GPP TS 32.299) CG Address AVP code
*/
int CG_ADDRESS = 846;
/**
* Ro/Rf (3GPP TS 32.299) Change Condition AVP code
*/
int CHANGE_CONDITION = 2037;
/**
* Ro/Rf (3GPP TS 32.299) Change Time AVP code
*/
int CHANGE_TIME = 2038;
/**
* Ro/Rf (3GPP TS 32.299) Charged Party AVP code
*/
int CHARGED_PARTY = 857;
/**
* Ro/Rf (3GPP TS 32.299) Charging Rule Base Name AVP code
*/
int CHARGING_RULE_BASE_NAME = 1004;
/**
* Ro/Rf (3GPP TS 32.299) Class Identifier AVP code
*/
int CLASS_IDENTIFIER = 1214;
/**
* Ro/Rf (3GPP TS 32.299) Client Address AVP code
*/
int CLIENT_ADDRESS = 2018;
/**
* Ro/Rf (3GPP TS 32.299) Content Class AVP code
*/
int CONTENT_CLASS = 1220;
/**
* Ro/Rf (3GPP TS 32.299) Content Disposition AVP code
*/
int CONTENT_DISPOSITION = 828;
/**
* Ro/Rf (3GPP TS 32.299) Content ID AVP code
*/
int CONTENT_ID = 2116;
/**
* Ro/Rf (3GPP TS 32.299) Content Provider ID AVP code
*/
int CONTENT_PROVIDER_ID = 2117;
/**
* Ro/Rf (3GPP TS 32.299) Content Length AVP code
*/
int CONTENT_LENGTH = 827;
/**
* Ro/Rf (3GPP TS 32.299) Content Size AVP code
*/
int CONTENT_SIZE = 1206;
/**
* Ro/Rf (3GPP TS 32.299) Content Type AVP code
*/
int CONTENT_TYPE = 826;
/**
* Ro/Rf (3GPP TS 32.299) Current Tariff AVP code
*/
int CURRENT_TARIFF = 2056;
/**
* Ro/Rf (3GPP TS 32.299) Data Coding Scheme AVP code
*/
int DATA_CODING_SCHEME = 2001;
/**
* Ro/Rf (3GPP TS 32.299) DCD Information AVP code
*/
int DCD_INFORMATION = 2115;
/**
* Ro/Rf (3GPP TS 32.299) Deferred Location Event Type AVP code
*/
int DEFERRED_LOCATION_EVENT_TYPE = 1230;
/**
* Ro/Rf (3GPP TS 32.299) Delivery Report Requested AVP code
*/
int DELIVERY_REPORT_REQUESTED = 1216;
/**
* Ro/Rf (3GPP TS 32.299) Delivery Status AVP code
*/
int DELIVERY_STATUS = 2104;
/**
* Ro/Rf (3GPP TS 32.299) Destination Interface AVP code
*/
int DESTINATION_INTERFACE = 2002;
/**
* Ro/Rf (3GPP TS 32.299) Diagnostics AVP code
*/
int DIAGNOSTICS = 2039;
/**
* Ro/Rf (3GPP TS 32.299) Domain Name AVP code
*/
int DOMAIN_NAME = 1200;
/**
* Ro/Rf (3GPP TS 32.299) DRM Content AVP code
*/
int DRM_CONTENT = 1221;
/**
* Ro/Rf (3GPP TS 32.299) Dynamic Address Flag AVP code
*/
int DYNAMIC_ADDRESS_FLAG = 2051;
/**
* Ro/Rf (3GPP TS 32.299) Early Media Description AVP code
*/
int EARLY_MEDIA_DESCRIPTION = 1272;
/**
* Ro/Rf (3GPP TS 32.299) Envelope AVP code
*/
int ENVELOPE = 1266;
/**
* Ro/Rf (3GPP TS 32.299) Envelope End Time AVP code
*/
int ENVELOPE_END_TIME = 1267;
/**
* Ro/Rf (3GPP TS 32.299) Envelope Reporting AVP code
*/
int ENVELOPE_REPORTING = 1268;
/**
* Ro/Rf (3GPP TS 32.299) Envelope Start Time AVP code
*/
int ENVELOPE_START_TIME = 1269;
/**
* Ro/Rf (3GPP TS 32.299) Event AVP code
*/
int EVENT = 825;
/**
* Ro/Rf (3GPP TS 32.299) Event Charging TimeStamp AVP code
*/
int EVENT_CHARGING_TIMESTAMP = 1258;
/**
* Ro/Rf (3GPP TS 32.299) Event Type AVP code
*/
int EVENT_TYPE = 823;
/**
* Ro/Rf (3GPP TS 32.299) Expires AVP code
*/
int EXPIRES = 888;
/**
* Ro/Rf (3GPP TS 32.299) File Repair Supported AVP code
*/
int FILE_REPAIR_SUPPORTED = 1224;
/**
* Ro/Rf (3GPP TS 32.299) Flows AVP code
*/
int FLOWS = 510;
/**
* Ro/Rf (3GPP TS 32.299) GGSN Address AVP code
*/
int GGSN_ADDRESS = 847;
/**
* Ro/Rf (3GPP TS 32.299) Guaranteed Bitrate UL AVP code
*/
int GUARANTEED_BITRATE_UL = 1026;
/**
* Ro/Rf (3GPP TS 32.299) Guaranteed Bitrate UL AVP code
*/
int GUARANTEED_BITRATE_DL = 1025;
/**
* Ro/Rf (3GPP TS 32.299) IM Information AVP code
*/
int IM_INFORMATION = 2110;
/**
* Ro/Rf (3GPP TS 32.299) IMS Charging Identifier AVP code
*/
int IMS_CHARGING_IDENTIFIER = 841;
/**
* Ro/Rf (3GPP TS 32.299) IMS Communication Service Identifier AVP code
*/
int IMS_COMMUNICATION_SERVICE_IDENTIFIER = 1281;
/**
* Ro/Rf (3GPP TS 32.299) IMS Information AVP code
*/
int IMS_INFORMATION = 876;
/**
* Ro/Rf (3GPP TS 32.299) Incoming Trunk Group Id AVP code
*/
int INCOMING_TRUNK_GROUP_ID = 852;
/**
* Ro/Rf (3GPP TS 32.299) Incremental Cost AVP code
*/
int INCREMENTAL_COST = 2062;
/**
* Ro/Rf (3GPP TS 32.299) Interface Id AVP code
*/
int INTERFACE_ID = 2003;
/**
* Ro/Rf (3GPP TS 32.299) Interface Port AVP code
*/
int INTERFACE_PORT = 2004;
/**
* Ro/Rf (3GPP TS 32.299) Interface Text AVP code
*/
int INTERFACE_TEXT = 2005;
/**
* Ro/Rf (3GPP TS 32.299) Interface Type AVP code
*/
int INTERFACE_TYPE = 2006;
/**
* Ro/Rf (3GPP TS 32.299) Inter Operator Identifier AVP code
*/
int INTER_OPERATOR_IDENTIFIER = 838;
/**
* Ro/Rf (3GPP TS 32.299) LCS Client Dialed By MS AVP code
*/
int LCS_CLIENT_DIALED_BY_MS = 1233;
/**
* Ro/Rf (3GPP TS 32.299) LCS Client External ID AVP code
*/
int LCS_CLIENT_EXTERNAL_ID = 1234;
/**
* Ro/Rf (3GPP TS 32.299) LCS Client Id AVP code
*/
int LCS_CLIENT_ID = 1232;
/**
* Ro/Rf (3GPP TS 32.299) LCS Client Type AVP code
*/
int LCS_CLIENT_TYPE = 1241;
/**
* Ro/Rf (3GPP TS 32.299) LCS Data Coding Scheme AVP code
*/
int LCS_DATA_CODING_SCHEME = 1236;
/**
* Ro/Rf (3GPP TS 32.299) LCS Format Indicator AVP code
*/
int LCS_FORMAT_INDICATOR = 1237;
/**
* Ro/Rf (3GPP TS 32.299) LCS Information AVP code
*/
int LCS_INFORMATION = 878;
/**
* Ro/Rf (3GPP TS 32.299) LCS Name String AVP code
*/
int LCS_NAME_STRING = 1238;
/**
* Ro/Rf (3GPP TS 32.299) LCS Requestor Id AVP code
*/
int LCS_REQUESTOR_ID = 1239;
/**
* Ro/Rf (3GPP TS 32.299) LCS Requestor Id String AVP code
*/
int LCS_REQUESTOR_ID_STRING = 1240;
/**
* Ro/Rf (3GPP TS 32.299) Local Sequence Number AVP code
*/
int LOCAL_SEQUENCE_NUMBER = 2063;
/**
* Ro/Rf (3GPP TS 32.299) Location Estimate AVP code
*/
int LOCATION_ESTIMATE = 1242;
/**
* Ro/Rf (3GPP TS 32.299) Location Estimate Type AVP code
*/
int LOCATION_ESTIMATE_TYPE = 1243;
/**
* Ro/Rf (3GPP TS 32.299) Location Type AVP code
*/
int LOCATION_TYPE = 1244;
/**
* Ro/Rf (3GPP TS 32.299) Max Requested Bandwidth DL AVP code
*/
int MAX_REQUESTED_BANDWIDTH_DL = 515;
/**
* Ro/Rf (3GPP TS 32.299) Max Requested Bandwidth UL AVP code
*/
int MAX_REQUESTED_BANDWIDTH_UL = 516;
/**
* Ro/Rf (3GPP TS 32.299) MBMS 2G 3G Indicator AVP code
*/
int MBMS_2G_3G_INDICATOR = 907;
/**
* Ro/Rf (3GPP TS 32.299) MBMS Information AVP code
*/
int MBMS_INFORMATION = 880;
/**
* Ro/Rf (3GPP TS 32.299) MBMS Service Area AVP code
*/
int MBMS_SERVICE_AREA = 903;
/**
* Ro/Rf (3GPP TS 32.299) MBMS Service Type AVP code
*/
int MBMS_SERVICE_TYPE = 906;
/**
* Ro/Rf (3GPP TS 32.299) MBMS Session Identity AVP code
*/
int MBMS_SESSION_IDENTITY = 908;
/**
* Ro/Rf (3GPP TS 32.299) MBMS User Service Type AVP code
*/
int MBMS_USER_SERVICE_TYPE = 1225;
/**
* Ro/Rf (3GPP TS 32.299) Media Initiator Flag AVP code
*/
int MEDIA_INITIATOR_FLAG = 882;
/**
* Ro/Rf (3GPP TS 32.299) Media Initiator Party AVP code
*/
int MEDIA_INITIATOR_PARTY = 1288;
/**
* Ro/Rf (3GPP TS 32.299) Message Body AVP code
*/
int MESSAGE_BODY = 889;
/**
* Ro/Rf (3GPP TS 32.299) Message Class AVP code
*/
int MESSAGE_CLASS = 1213;
/**
* Ro/Rf (3GPP TS 32.299) Message ID AVP code
*/
int MESSAGE_ID = 1210;
/**
* Ro/Rf (3GPP TS 32.299) Message Size AVP code
*/
int MESSAGE_SIZE = 1212;
/**
* Ro/Rf (3GPP TS 32.299) Message Type AVP code
*/
int MESSAGE_TYPE = 1211;
/**
* Ro/Rf (3GPP TS 32.299) MMBox Storage Requested AVP code
*/
int MMBOX_STORAGE_REQUESTED = 1248;
/**
* Ro/Rf (3GPP TS 32.299) MM Content Type AVP code
*/
int MM_CONTENT_TYPE = 1203;
/**
* Ro/Rf (3GPP TS 32.299) MMS Information AVP code
*/
int MMS_INFORMATION = 877;
/**
* Ro/Rf (3GPP TS 32.299) MMTel Information AVP code
*/
int MMTEL_INFORMATION = 2030;
/**
* Ro/Rf (3GPP TS 32.299) MSISDN AVP code
*/
int MSISDN = 701;
/**
* Ro/Rf (3GPP TS 32.299) Next Tariff AVP code
*/
int NEXT_TARIFF = 2057;
/**
* Ro/Rf (3GPP TS 32.299) Node Functionality AVP code
*/
int NODE_FUNCTIONALITY = 862;
/**
* Ro/Rf (3GPP TS 32.299) Node Id AVP code
*/
int NODE_ID = 2064;
/**
* Ro/Rf (3GPP TS 32.299) Number Of Diversions AVP code
*/
int NUMBER_OF_DIVERSIONS = 2034;
/**
* Ro/Rf (3GPP TS 32.299) Number Of Messages Sent AVP code
*/
int NUMBER_OF_MESSAGES_SENT = 2019;
/**
* Ro/Rf (3GPP TS 32.299) Number Of Messages Successfully Exploded AVP code
*/
int NUMBER_OF_MESSAGES_SUCCESSFULLY_EXPLODED = 2111;
/**
* Ro/Rf (3GPP TS 32.299) Number Of Messages Successfully Sent AVP code
*/
int NUMBER_OF_MESSAGES_SUCCESSFULLY_SENT = 2112;
/**
* Ro/Rf (3GPP TS 32.299) Number Of Participants AVP code
*/
int NUMBER_OF_PARTICIPANTS = 885;
/**
* Ro/Rf (3GPP TS 32.299) Number Of Received Talk Bursts AVP code
*/
int NUMBER_OF_RECEIVED_TALK_BURSTS = 1282;
/**
* Ro/Rf (3GPP TS 32.299) Number Of Talk Bursts AVP code
*/
int NUMBER_OF_TALK_BURSTS = 1283;
/**
* Ro/Rf (3GPP TS 32.299) Number Portability Routing Information AVP code
*/
int NUMBER_PORTABILITY_ROUTING_INFORMATION = 2024;
/**
* Ro/Rf (3GPP TS 32.299) Offline Charging AVP code
*/
int OFFLINE_CHARGING = 1278;
/**
* Ro/Rf (3GPP TS 32.299) Online Charging Flag AVP code
*/
int ONLINE_CHARGING_FLAG = 2303;
/**
* Ro/Rf (3GPP TS 32.299) Originating IOI AVP code
*/
int ORIGINATING_IOI = 839;
/**
* Ro/Rf (3GPP TS 32.299) Originator SCCP Address AVP code
*/
int ORIGINATOR_SCCP_ADDRESS = 2008;
/**
* Ro/Rf (3GPP TS 32.299) Originator AVP code
*/
int ORIGINATOR = 864;
/**
* Ro/Rf (3GPP TS 32.299) Originator Address AVP code
*/
int ORIGINATOR_ADDRESS = 886;
/**
* Ro/Rf (3GPP TS 32.299) Originator Received Address AVP code
*/
int ORIGINATOR_RECEIVED_ADDRESS = 2027;
/**
* Ro/Rf (3GPP TS 32.299) Originator Interface AVP code
*/
int ORIGINATOR_INTERFACE = 2009;
/**
* Ro/Rf (3GPP TS 32.299) Outgoing Trunk Group Id AVP code
*/
int OUTGOING_TRUNK_GROUP_ID = 853;
/**
* Ro/Rf (3GPP TS 32.299) Participant Access Priority AVP code
*/
int PARTICIPANT_ACCESS_PRIORITY = 1259;
/**
* Ro/Rf (3GPP TS 32.299) Participant Action Type AVP code
*/
int PARTICIPANT_ACTION_TYPE = 2049;
/**
* Ro/Rf (3GPP TS 32.299) Participant Group AVP code
*/
int PARTICIPANT_GROUP = 1260;
/**
* Ro/Rf (3GPP TS 32.299) Participants Involved AVP code
*/
int PARTICIPANTS_INVOLVED = 887;
/**
* Ro/Rf (3GPP TS 32.299) PDG Address AVP code
*/
int PDG_ADDRESS = 895;
/**
* Ro/Rf (3GPP TS 32.299) PDG Charging Id AVP code
*/
int PDG_CHARGING_ID = 896;
/**
* Ro/Rf (3GPP TS 32.299) PDN Connection ID AVP code
*/
int PDN_CONNECTION_ID = 2050;
/**
* Ro/Rf (3GPP TS 32.299) PDP Address AVP code
*/
int PDP_ADDRESS = 1227;
/**
* Ro/Rf (3GPP TS 32.299) PDP Context Type AVP code
*/
int PDP_CONTEXT_TYPE = 1247;
/**
* Ro/Rf (3GPP TS 32.299) PoC Change Condition AVP code
*/
int POC_CHANGE_CONDITION = 1261;
/**
* Ro/Rf (3GPP TS 32.299) PoC Change Time AVP code
*/
int POC_CHANGE_TIME = 1262;
/**
* Ro/Rf (3GPP TS 32.299) PoC Controlling Address AVP code
*/
int POC_CONTROLLING_ADDRESS = 858;
/**
* Ro/Rf (3GPP TS 32.299) PoC Event Type AVP code
*/
int POC_EVENT_TYPE = 2025;
/**
* Ro/Rf (3GPP TS 32.299) PoC Group Name AVP code
*/
int POC_GROUP_NAME = 859;
/**
* Ro/Rf (3GPP TS 32.299) PoC Information AVP code
*/
int POC_INFORMATION = 879;
/**
* Ro/Rf (3GPP TS 32.299) PoC Server Role AVP code
*/
int POC_SERVER_ROLE = 883;
/**
* Ro/Rf (3GPP TS 32.299) PoC Session Id AVP code
*/
int POC_SESSION_ID = 1229;
/**
* Ro/Rf (3GPP TS 32.299) PoC Session Initiation type AVP code
*/
int POC_SESSION_INITIATION_TYPE = 1277;
/**
* Ro/Rf (3GPP TS 32.299) PoC Session Type AVP code
*/
int POC_SESSION_TYPE = 884;
/**
* Ro/Rf (3GPP TS 32.299) PoC User Role AVP code
*/
int POC_USER_ROLE = 1252;
/**
* Ro/Rf (3GPP TS 32.299) PoC User Role IDs AVP code
*/
int POC_USER_ROLE_IDS = 1253;
/**
* Ro/Rf (3GPP TS 32.299) PoC User Role info Units AVP code
*/
int POC_USER_ROLE_INFO_UNITS = 1254;
/**
* Ro/Rf (3GPP TS 32.299) Positioning Data AVP code
*/
int POSITIONING_DATA = 1245;
/**
* Ro/Rf (3GPP TS 32.299) Priority AVP code
*/
int PRIORITY = 1209;
/**
* Ro/Rf (3GPP TS 32.299) Priority Level AVP code
*/
int PRIORITY_LEVEL = 1046;
/**
* Ro/Rf (3GPP TS 32.299) PS Append Free Format Data AVP code
*/
int PS_APPEND_FREE_FORMAT_DATA = 867;
/**
* Ro/Rf (3GPP TS 32.299) PS Free Format Data AVP code
*/
int PS_FREE_FORMAT_DATA = 866;
/**
* Ro/Rf (3GPP TS 32.299) PS Furnish Charging Information AVP code
*/
int PS_FURNISH_CHARGING_INFORMATION = 865;
/**
* Ro/Rf (3GPP TS 32.299) PS Information AVP code
*/
int PS_INFORMATION = 874;
/**
* Ro/Rf (3GPP TS 32.299) QoS Information AVP code
*/
int QOS_INFORMATION = 1016;
/**
* Ro/Rf (3GPP TS 32.299) QoS Class Identifier AVP code
*/
int QOS_CLASS_IDENTIFIER = 1028;
/**
* Ro/Rf (3GPP TS 32.299) Quota Consumption Time AVP code
*/
int QUOTA_CONSUMPTION_TIME = 881;
/**
* Ro/Rf (3GPP TS 32.299) Quota Holding Time AVP code
*/
int QUOTA_HOLDING_TIME = 871;
/**
* Ro/Rf (3GPP TS 32.299) RAI AVP code
*/
int RAI = 909;
/**
* Ro/Rf (3GPP TS 32.299) Rate Element AVP code
*/
int RATE_ELEMENT = 2058;
/**
* Ro/Rf (3GPP TS 32.299) Read Reply Report Requested AVP code
*/
int READ_REPLY_REPORT_REQUESTED = 1222;
/**
* Ro/Rf (3GPP TS 32.299) Received Talk Burst Time AVP code
*/
int RECEIVED_TALK_BURST_TIME = 1284;
/**
* Ro/Rf (3GPP TS 32.299) Received Talk Burst Volume AVP code
*/
int RECEIVED_TALK_BURST_VOLUME = 1285;
/**
* Ro/Rf (3GPP TS 32.299) Recipient Address AVP code
*/
int RECIPIENT_ADDRESS = 1201;
/**
* Ro/Rf (3GPP TS 32.299) Recipient Info AVP code
*/
int RECIPIENT_INFO = 2026;
/**
* Ro/Rf (3GPP TS 32.299) Recipient Received Address AVP code
*/
int RECIPIENT_RECEIVED_ADDRESS = 2028;
/**
* Ro/Rf (3GPP TS 32.299) Recipient SCCP Address AVP code
*/
int RECIPIENT_SCCP_ADDRESS = 2010;
/**
* Ro/Rf (3GPP TS 32.299) Refund Information AVP code
*/
int REFUND_INFORMATION = 2022;
/**
* Ro/Rf (3GPP TS 32.299) Remaining Balance AVP code
*/
int REMAINING_BALANCE = 2021;
/**
* Ro/Rf (3GPP TS 32.299) Reply Applic ID AVP code
*/
int REPLY_APPLIC_ID = 1223;
/**
* Ro/Rf (3GPP TS 32.299) Reply Path Requested AVP code
*/
int REPLY_PATH_REQUESTED = 2011;
/**
* Ro/Rf (3GPP TS 32.299) Reporting Reason AVP code
*/
int REPORTING_REASON = 872;
/**
* Ro/Rf (3GPP TS 32.299) Requested Party Address AVP code
*/
int REQUESTED_PARTY_ADDRESS = 1251;
/**
* Ro/Rf (3GPP TS 32.299) Required MBMS Bearer Capabilities AVP code
*/
int REQUIRED_MBMS_BEARER_CAPABILITIES = 901;
/**
* Ro/Rf (3GPP TS 32.299) Role of Node AVP code
*/
int ROLE_OF_NODE = 829;
/**
* Ro/Rf (3GPP TS 32.299) Scale Factor AVP code
*/
int SCALE_FACTOR = 2059;
/**
* Ro/Rf (3GPP TS 32.299) SDP Answer Timestamp AVP code
*/
int SDP_ANSWER_TIMESTAMP = 1275;
/**
* Ro/Rf (3GPP TS 32.299) SDP Media Component AVP code
*/
int SDP_MEDIA_COMPONENT = 843;
/**
* Ro/Rf (3GPP TS 32.299) SDP Media Description AVP code
*/
int SDP_MEDIA_DESCRIPTION = 845;
/**
* Ro/Rf (3GPP TS 32.299) SDP Media Name AVP code
*/
int SDP_MEDIA_NAME = 844;
/**
* Ro/Rf (3GPP TS 32.299) SDP Offer Timestamp AVP code
*/
int SDP_OFFER_TIMESTAMP = 1274;
/**
* Ro/Rf (3GPP TS 32.299) SDP Session Description AVP code
*/
int SDP_SESSION_DESCRIPTION = 842;
/**
* Ro/Rf (3GPP TS 32.299) SDP TimeStamps AVP code
*/
int SDP_TIMESTAMPS = 1273;
/**
* Ro/Rf (3GPP TS 32.299) SDP Type AVP code
*/
int SDP_TYPE = 2036;
/**
* Ro/Rf (3GPP TS 32.299) Served Party IP Address AVP code
*/
int SERVED_PARTY_IP_ADDRESS = 848;
/**
* Ro/Rf (3GPP TS 32.299) Service Data Container AVP code
*/
int SERVICE_DATA_CONTAINER = 2040;
/**
* Ro/Rf (3GPP TS 32.299) Service Generic Information AVP code
*/
int SERVICE_GENERIC_INFORMATION = 1256;
/**
* Ro/Rf (3GPP TS 32.299) Service Id AVP code
*/
int SERVICE_IDENTIFIER = 855;
/**
* Ro/Rf (3GPP TS 32.299) Service Information AVP code
*/
int SERVICE_INFORMATION = 873;
/**
* Ro/Rf (3GPP TS 32.299) Service Mode AVP code
*/
int SERVICE_MODE = 2032;
/**
* Ro/Rf (3GPP TS 32.299) Service Specific Data AVP code
*/
int SERVICE_SPECIFIC_DATA = 863;
/**
* Ro/Rf (3GPP TS 32.299) Service Specific Info AVP code
*/
int SERVICE_SPECIFIC_INFO = 1249;
/**
* Ro/Rf (3GPP TS 32.299) Service Specific Type AVP code
*/
int SERVICE_SPECIFIC_TYPE = 1257;
/**
* Ro/Rf (3GPP TS 32.299) Serving Node Type AVP code
*/
int SERVING_NODE_TYPE = 2047;
/**
* Ro/Rf (3GPP TS 32.299) Service Type AVP code
*/
int SERVICE_TYPE = 2031;
/**
* Ro/Rf (3GPP TS 32.299) SGSN Address AVP code
*/
int SGSN_ADDRESS = 1228;
/**
* Ro/Rf (3GPP TS 32.299) SGW Change AVP code
*/
int SGW_CHANGE = 2064;
/**
* Ro/Rf (3GPP TS 32.299) SIP Method AVP code
*/
int SIP_METHOD = 824;
/**
* Ro/Rf (3GPP TS 32.299) SIP Request Timestamp Fraction AVP code
*/
int SIP_REQUEST_TIMESTAMP_FRACTION = 2301;
/**
* Ro/Rf (3GPP TS 32.299) SIP Request Timestamp AVP code
*/
int SIP_REQUEST_TIMESTAMP = 834;
/**
* Ro/Rf (3GPP TS 32.299) SIP Response Timestamp Fraction AVP code
*/
int SIP_RESPONSE_TIMESTAMP_FRACTION = 2302;
/**
* Ro/Rf (3GPP TS 32.299) SIP Response Timestamp AVP code
*/
int SIP_RESPONSE_TIMESTAMP = 835;
/**
* Ro/Rf (3GPP TS 32.299) SM Discharge Time AVP code
*/
int SM_DISCHARGE_TIME = 2012;
/**
* Ro/Rf (3GPP TS 32.299) SM Message Type AVP code
*/
int SM_MESSAGE_TYPE = 2007;
/**
* Ro/Rf (3GPP TS 32.299) SM Protocol ID AVP code
*/
int SM_PROTOCOL_ID = 2013;
/**
* Ro/Rf (3GPP TS 32.299) SMSC Address AVP code
*/
int SMSC_ADDRESS = 2017;
/**
* Ro/Rf (3GPP TS 32.299) SMS Information AVP code
*/
int SMS_INFORMATION = 2000;
/**
* Ro/Rf (3GPP TS 32.299) SMS Node AVP code
*/
int SMS_NODE = 2016;
/**
* Ro/Rf (3GPP TS 32.299) SM Service Type AVP code
*/
int SM_SERVICE_TYPE = 2029;
/**
* Ro/Rf (3GPP TS 32.299) SM Status AVP code
*/
int SM_STATUS = 2014;
/**
* Ro/Rf (3GPP TS 32.299) SM User Data Header AVP code
*/
int SM_USER_DATA_HEADER = 2015;
/**
* Ro/Rf (3GPP TS 32.299) Start Time AVP code
*/
int START_TIME = 2041;
/**
* Ro/Rf (3GPP TS 32.299) Stop Time AVP code
*/
int STOP_TIME = 2042;
/**
* Ro/Rf (3GPP TS 32.299) Submission Time AVP code
*/
int SUBMISSION_TIME = 1202;
/**
* Ro/Rf (3GPP TS 32.299) Subscriber Role AVP code
*/
int SUBSCRIBER_ROLE = 2033;
/**
* Ro/Rf (3GPP TS 32.299) Supplementary Service AVP code
*/
int SUPPLEMENTARY_SERVICE = 2048;
/**
* Ro/Rf (3GPP TS 32.299) Talk Burst Exchange AVP code
*/
int TALK_BURST_EXCHANGE = 1255;
/**
* Ro/Rf (3GPP TS 32.299) Talk Burst Time AVP code
*/
int TALK_BURST_TIME = 1286;
/**
* Ro/Rf (3GPP TS 32.299) Talk Burst Volume AVP code
*/
int TALK_BURST_VOLUME = 1287;
/**
* Ro/Rf (3GPP TS 32.299) Tariff Information AVP code
*/
int TARIFF_INFORMATION = 2060;
/**
* Ro/Rf/S13 (3GPP TS 32.299) Terminal Information AVP code
*/
int TERMINAL_INFORMATION = 1401;
/**
* Ro/Rf (3GPP TS 32.299) Terminating IOI AVP code
*/
int TERMINATING_IOI = 840;
/**
* Ro/Rf (3GPP TS 32.299) Time First Usage AVP code
*/
int TIME_FIRST_USAGE = 2043;
/**
* Ro/Rf (3GPP TS 32.299) Time Last Usage AVP code
*/
int TIME_LAST_USAGE = 2044;
/**
* Ro/Rf (3GPP TS 32.299) Time Quota Mechanism AVP code
*/
int TIME_QUOTA_MECHANISM = 1270;
/**
* Ro/Rf (3GPP TS 32.299) Time Quota Threshold AVP code
*/
int TIME_QUOTA_THRESHOLD = 868;
/**
* Ro/Rf (3GPP TS 32.299) Time Quota Type AVP code
*/
int TIME_QUOTA_TYPE = 1271;
/**
* Ro/Rf (3GPP TS 32.299) Time Stamps AVP code
*/
int TIME_STAMPS = 833;
/**
* Ro/Rf (3GPP TS 32.299) Time Usage AVP code
*/
int TIME_USAGE = 2045;
/**
* Ro/Rf (3GPP TS 32.299) TMGI AVP code
*/
int TMGI = 900;
/**
* Ro/Rf (3GPP TS 32.299) Token Text AVP code
*/
int TOKEN_TEXT = 1215;
/**
* Ro/Rf (3GPP TS 32.299) Total Number Of Messages Exploded AVP code
*/
int TOTAL_NUMBER_OF_MESSAGES_EXPLODED = 2113;
/**
* Ro/Rf (3GPP TS 32.299) Total Number Of Messages Sent AVP code
*/
int TOTAL_NUMBER_OF_MESSAGES_SENT = 2114;
/**
* Ro/Rf (3GPP TS 32.299) Traffic Data Volumes AVP code
*/
int TRAFFIC_DATA_VOLUMES = 2046;
/**
* Ro/Rf (3GPP TS 32.299) Trigger AVP code
*/
int TRIGGER = 1264;
/**
* Ro/Rf (3GPP TS 32.299) Trigger Type AVP code
*/
int TRIGGER_TYPE = 870;
/**
* Ro/Rf (3GPP TS 32.299) Trunk Group Id AVP code
*/
int TRUNK_GROUP_ID = 851;
/**
* Ro/Rf (3GPP TS 32.299) Type Number AVP code
*/
int TYPE_NUMBER = 1204;
/**
* Ro/Rf (3GPP TS 32.299) Unit Cost AVP code
*/
int UNIT_COST = 2061;
/**
* Ro/Rf (3GPP TS 32.299) Unit Quota Threshold AVP code
*/
int UNIT_QUOTA_THRESHOLD = 1226;
/**
* Ro/Rf (3GPP TS 32.299) User Data AVP code
*/
int USER_DATA_RORF = 606;
/**
* Ro/Rf (3GPP TS 32.299) User Participating Type AVP code
*/
int USER_PARTICIPATING_TYPE = 1279;
/**
* Ro/Rf (3GPP TS 32.299) User Session Id AVP code
*/
int USER_SESSION_ID = 830;
/**
* Ro/Rf (3GPP TS 32.299) VAS Id AVP code
*/
int VAS_ID = 1102;
/**
* Ro/Rf (3GPP TS 32.299) VASP Id AVP code
*/
int VASP_ID = 1101;
/**
* Ro/Rf (3GPP TS 32.299) Volume Quota Threshold AVP code
*/
int VOLUME_QUOTA_THRESHOLD = 869;
/**
* Ro/Rf (3GPP TS 32.299) WAG Address AVP code
*/
int WAG_ADDRESS = 890;
/**
* Ro/Rf (3GPP TS 32.299) WAG PLMN Id AVP code
*/
int WAG_PLMN_ID = 891;
/**
* Ro/Rf (3GPP TS 32.299) WLAN Information AVP code
*/
int WLAN_INFORMATION = 875;
/**
* Ro/Rf (3GPP TS 32.299) WLAN Radio Container AVP code
*/
int WLAN_RADIO_CONTAINER = 892;
/**
* Ro/Rf (3GPP TS 32.299) WLAN Session Id AVP code
*/
int WLAN_SESSION_ID = 1246;
/**
* Ro/Rf (3GPP TS 32.299) WLAN Technology AVP code
*/
int WLAN_TECHNOLOGY = 893;
/**
* Ro/Rf (3GPP TS 32.299) WLAN UE Local IPAddress AVP code
*/
int WLAN_UE_LOCAL_IPADDRESS = 894;
// S13/S13' Interfaces AVPs
/**
* S13/S13' (3GPP TS 29.272) 3GPP IMEI AVP code
*/
int TGPP_IMEI = 1402;
/**
* S13/S13' (3GPP TS 29.272) Software Version AVP code
*/
int SOFTWARE_VERSION = 1403;
/**
* S13/S13' (3GPP TS 29.272) Equipment-Status AVP code
*/
int EQUIPMENT_STATUS = 1445;
/**
* S13/S13' (3GPP TS 29.272) 3GPP2 MEID AVP code
*/
int TGPP2_MEID = 1471;
/********************************************************/
/*** SLh interface (GMLC - HSS) AVPs (3GPP TS 29.173) ***/
/********************************************************/
/**
* SLh (3GPP TS 29.173) LMSI AVP code
*/
int LMSI = 2400;
/**
* SLh (3GPP TS 29.173) Serving-Node AVP code
*/
int SERVING_NODE = 2401;
/**
* SLh (3GPP TS 29.173) MME-Name AVP code
*/
int MME_NAME = 2402;
/**
* SLh (3GPP TS 29.173) MCS-Number AVP code
*/
int MSC_NUMBER = 2403;
/**
* SLh (3GPP TS 29.173) LCS-Capabilities-Sets AVP code
*/
int LCS_CAPABILITIES_SETS = 2404;
/**
* SLh (3GPP TS 29.173) GMLC-Address AVP code
*/
int GMLC_ADDRESS = 2405;
/**
* SLh (3GPP TS 29.173) Additional-Serving-Node AVP code
*/
int ADDITIONAL_SERVING_NODE = 2406;
/**
* SLh (3GPP TS 29.173) PPR-Address AVP code
*/
int PPR_ADDRESS = 2407;
/**
* SLh (3GPP TS 29.173) MME-Realm AVP code
*/
int MME_REALM = 2408;
/**
* SLh (3GPP TS 29.173) SGSN-Name AVP code
*/
int SGSN_NAME = 2409;
/**
* SLh (3GPP TS 29.173) SGSN-Realm AVP code
*/
int SGSN_REALM = 2410;
/**
* SLh (3GPP TS 29.173) RIA-Flags AVP code
*/
int RIA_FLAGS = 2411;
/**
* SLh (3GPP TS 29.173) SGSN-Number AVP code (reused from 3GPP TS 29.272, MME - SGSN interface)
*/
int SGSN_NUMBER = 1489;
/**
* SLh (3GPP TS 29.173) GMLC-Number AVP code (reused from 3GPP TS 29.272, MME - SGSN interface)
*/
int GMLC_NUMBER = 1474;
/**
* SLh (3GPP TS 29.173) 3GPP-AAA-Server-Name AVP code (reused from 3GPP TS 29.273, 3GPP AAA EPS interface)
*/
int TGPP_AAA_SERVER_NAME = 318;
// SLh re-used Diameter AVPs:
// MSISDN 3GPP TS 29.329;
// SGSN-Number 3GPP TS 29.272;
// Supported-Features 3GPP TS 29.229;
// Feature-List-ID 3GPP TS 29.229;
// Feature-List 3GPP TS 29.229;
// GMLC-Number 3GPP TS 29.272;
// 3GPP-AAA-Server-Name 3GPP TS 29.273
/********************************************************/
/*** SLg interface (GMLC - MME) AVPs (3GPP TS 29.172) ***/
/*** Diameter ELP Application (EPC LCS Protocol) ***/
/********************************************************/
/**
* SLg (3GPP TS 29.172) SLg-Location-Type AVP code
*/
int SLG_LOCATION_TYPE = 2500;
/**
* SLg (3GPP TS 29.172) LCS-EPS-Client-Name AVP code
*/
int LCS_EPS_CLIENT_NAME = 2501;
/**
* SLg (3GPP TS 29.172) LCS_Requestor_Name AVP code
*/
int LCS_REQUESTOR_NAME = 2502;
/**
* SLg (3GPP TS 29.172) LCS-Priority AVP code
*/
int LCS_PRIORITY = 2503;
/**
* SLg (3GPP TS 29.172) LCS-QoS AVP code
*/
int LCS_QOS = 2504;
/**
* SLg (3GPP TS 29.172) Horizontal-Accuracy AVP code
*/
int HORIZONTAL_ACCURACY = 2505;
/**
* SLg (3GPP TS 29.172) Vertical-Accuracy AVP code
*/
int VERTICAL_ACCURACY = 2506;
/**
* SLg (3GPP TS 29.172) Vertical-Requested AVP code
*/
int VERTICAL_REQUESTED = 2507;
/**
* SLg (3GPP TS 29.172) Velocity-Requested AVP code
*/
int VELOCITY_REQUESTED = 2508;
/**
* SLg (3GPP TS 29.172) Response-Time AVP code
*/
int RESPONSE_TIME = 2509;
/**
* SLg (3GPP TS 29.172) LCS-Supported-GAD-Shapes AVP code
*/
int LCS_SUPPORTED_GAD_SHAPES = 2510;
/**
* SLg (3GPP TS 29.172) LCS-Codeword AVP code
*/
int LCS_CODEWORD = 2511;
/**
* SLg (3GPP TS 29.172) LCS-Privacy-Check AVP code
*/
int LCS_PRIVACY_CHECK = 2512;
/**
* SLg (3GPP TS 29.172) Accuracy-Fulfilment-Indicator AVP code
*/
int ACCURACY_FULFILMENT_INDICATOR = 2513;
/**
* SLg (3GPP TS 29.172) Age-Of-Location-Estimate AVP code
*/
int AGE_OF_LOCATION_ESTIMATE = 2514;
/**
* SLg (3GPP TS 29.172) Velocity-Estimate 2515 AVP code
*/
int VELOCITY_ESTIMATE = 2515;
/**
* SLg (3GPP TS 29.172) EUTRAN-Positioning-Data AVP code
*/
int EUTRAN_POSITIONING_DATA = 2516;
/**
* SLg (3GPP TS 29.172) ECGI AVP code
*/
int ECGI = 2517;
/**
* SLg (3GPP TS 29.172) Location_Event AVP code
*/
int LOCATION_EVENT = 2518;
/**
* SLg (3GPP TS 29.172) Pseudonym-Indicator
*/
int PSEUDONYM_INDICATOR = 2519;
/**
* SLg (3GPP TS 29.172) LCS-Service-Type-ID AVP Code
*/
int LCS_SERVICE_TYPE_ID = 2520;
/**
* SLg (3GPP TS 29.172) LCS-Privacy-Check-Non-Session AVP Code
*/
int LCS_PRIVACY_CHECK_NON_SESSION = 2521;
/**
* SLg (3GPP TS 29.172) LCS-Privacy-Check-Session AVP Code
*/
int LCS_PRIVACY_CHECK_SESSION = 2522;
/**
* SLg (3GPP TS 29.172) LCS-QoS-Class AVP Code
*/
int LCS_QOS_CLASS = 2523;
/**
* SLg (3GPP TS 29.172) GERAN-Positioning-Info AVP Code
*/
int GERAN_POSITIONING_INFO = 2524;
/**
* SLg (3GPP TS 29.172) GERAN-Positioning-Data AVP Code
*/
int GERAN_POSITIONING_DATA = 2525;
/**
* SLg (3GPP TS 29.172) GERAN-GANSS-Positioning-Data AVP Code
*/
int GERAN_GANSS_POSITIONING_DATA = 2526;
/**
* SLg (3GPP TS 29.172) UTRAN-Positioning-Info AVP Code
*/
int UTRAN_POSITIONING_INFO = 2527;
/**
* SLg (3GPP TS 29.172) UTRAN-Positioning-Data AVP Code
*/
int UTRAN_POSITIONING_DATA = 2528;
/**
* SLg (3GPP TS 29.172) UTRAN-GANSS-Positioning-Data AVP Code
*/
int UTRAN_GANSS_POSITIONING_DATA = 2529;
/**
* SLg (3GPP TS 29.172) LRR-Flags AVP Code
*/
int LRR_FLAGS = 2530;
/**
* SLg (3GPP TS 29.172) LCS-Reference-Number AVP Code
*/
int LCS_REFERENCE_NUMBER = 2531;
/**
* SLg (3GPP TS 29.172) Deferred-Location-Type AVP Code
*/
int DEFERRED_LOCATION_TYPE = 2532;
/**
* SLg (3GPP TS 29.172) Area-Event-Info AVP Code
*/
int AREA_EVENT_INFO = 2533;
/**
* SLg (3GPP TS 29.172) Area-Definition AVP Code
*/
int AREA_DEFINITION = 2534;
/**
* SLg (3GPP TS 29.172) Area AVP Code
*/
int AREA = 2535;
/**
* SLg (3GPP TS 29.172) Area-Type AVP Code
*/
int AREA_TYPE = 2536;
/**
* SLg (3GPP TS 29.172) Area-Identification AVP Code
*/
int AREA_IDENTIFICATION = 2537;
/**
* SLg (3GPP TS 29.172) Occurrence-Info AVP Code
*/
int OCCURRENCE_INFO = 2538;
/**
* SLg (3GPP TS 29.172) Interval-Time AVP Code
*/
int INTERVAL_TIME = 2539;
/**
* SLg (3GPP TS 29.172) Periodic-LDR-Information AVP Code
*/
int PERIODIC_LDR_INFORMATION = 2540;
/**
* SLg (3GPP TS 29.172) Reporting-Amount AVP Code
*/
int REPORTING_AMOUNT = 2541;
/**
* SLg (3GPP TS 29.172) Reporting-Interval AVP Code
*/
int REPORTING_INTERVAL = 2542;
/**
* SLg (3GPP TS 29.172) Reporting-PLMN-List AVP Code
*/
int REPORTING_PLMN_LIST = 2543;
/**
* SLg (3GPP TS 29.172) PLMN-ID-List AVP Code
*/
int PLMN_ID_LIST = 2544;
/**
* SLg (3GPP TS 29.172) PLR-Flags AVP Code
*/
int PLR_FLAGS = 2545;
/**
* SLg (3GPP TS 29.172) PLA-Flags AVP Code
*/
int PLA_FLAGS = 2546;
/**
* SLg (3GPP TS 29.172) Deferred-MT-LR-Data AVP Code
*/
int DEFERRED_MT_LR_DATA = 2547;
/**
* SLg (3GPP TS 29.172) Termination-Cause AVP Code;
*/
int TERMINATION_CAUSE_LCS = 2548;
/**
* SLg (3GPP TS 29.172) LRA-Flags AVP Code
*/
int LRA_FLAGS = 2549;
/**
* SLg (3GPP TS 29.172) Periodic-Location-Support-Indicator AVP Code
*/
int PERIODIC_LOCATION_SUPPORT_INDICATOR = 2550;
/**
* SLg (3GPP TS 29.172)
*/
int PRIORITIZED_LIST_INDICATOR = 2551;
/**
* SLg (3GPP TS 29.172)ESMLC-Cell-Info AVP Code
*/
int ESMLC_CELL_INFO = 2552;
/**
* SLg (3GPP TS 29.172) Cell-Portion-ID AVP Code
*/
int CELL_PORTION_ID = 2553;
/**
* SLg (3GPP TS 29.172) 1xRTT-RCID AVP Code
*/
int ONEXRTT_RCID = 2554;
/**
* SLg (3GPP TS 29.172) Civic-Address AVP Code
*/
int CIVIC_ADDRESS = 2556;
/**
* SLg (3GPP TS 29.172) Barometric-Pressure AVP Code
*/
int BAROMETRIC_PRESSURE = 2557;
/**
* SLg (3GPP TS 29.172) UTRAN-Additional-Positioning-Data AVP Code
*/
int UTRAN_ADDITIONAL_POSITIONING_DATA = 2558;
/**
* SLg (3GPP TS 29.172) Motion-Event-Info
*/
int MOTION_EVENT_INFO = 2559;
/**
* SLg (3GPP TS 29.172) Linear-Distance
*/
int LINEAR_DISTANCE = 2560;
/**
* SLg (3GPP TS 29.172) Maximum-Interval
*/
int MAXIMUM_INTERVAL = 2561;
/**
* SLg (3GPP TS 29.172) Sampling-Interval
*/
int SAMPLING_INTERVAL = 2562;
/**
* SLg (3GPP TS 29.172) Reporting-Duration
*/
int REPORTING_DURATION = 2563;
/**
* SLg (3GPP TS 29.172) Reporting-Location-Requirements
*/
int REPORTING_LOCATION_REQUIREMENTS = 2564;
/**
* SLg (3GPP TS 29.172) Additional-Area
*/
int ADDITIONAL_AREA = 2565;
/**
* SLg (3GPP TS 29.172) Service-Selection AVP Code (reused from 3GPP TS 29.272 & IETF RFC 5778)
*/
int SERVICE_SELECTION = 493;
/**
* SLg (3GPP TS 29.172) Cell-Global-Identity AVP Code (reused from 3GPP TS 29.272)
*/
int CELL_GLOBAL_IDENTITY = 1604;
/**
* SLg (3GPP TS 29.172) Visited-PLMN-Id AVP Code (reused from 3GPP TS 29.272)
*/
int VISITED_PLMN_ID = 1407;
/**
* SLg (3GPP TS 29.172) Service-Area-Identity AVP Code (reused from 3GPP TS 29.272)
*/
int SERVICE_AREA_IDENTITY = 1607;
// Diameter ELP Application (SLg) reused AVPs:
// LCS-Format-Indicator 1237 3GPP TS 32.299;
// LCS-Name-String 1238 3GPP TS 2.299;
// LCS-Client-Type 1241 3GPP TS 32.299
// LCS-Requestor-Id-String 1240 3GPP TS 32.299;
// Location-Estimate 1242 3GPP TS 32.299;
// IMEI 1402 3GPP TS 29.272;
// MSISDN 701 3GPP TS 29.329;
// Service-Selection 493 3GPP TS 29.272, IETF RFC 5778
// User-Name 1 IETF RFC 3588;
// Supported-Features 628 3GPP TS 29.229;
// Feature-List-ID 629 3GPP TS 29.229;
// Feature-List 630 3GPP TS 29.229;
// Serving-Node 2401 3GPP TS 29.173;
// Cell-Global-Identity 1604 3GPP TS 29.272;
// Service-Area-Identity 1607 3GPP TS 29.272;
// GMLC-Address 2405 3GPP TS 29.173;
// Visited-PLMN-Id 1407 3GPP TS 29.272
/**
* @return the AVP code.
*/
int getCode();
/**
* @return true if Vendor-id is present in Avp header
*/
boolean isVendorId();
/**
* @return true if flag M is set 1
*/
boolean isMandatory();
/**
* @return true if flag E is set 1
*/
boolean isEncrypted();
/**
* @return Vendor-Id if it present (-1 if it not avalible)
*/
long getVendorId();
/**
* @return data as byte array (Raw format)
*
* @throws AvpDataException if data has incorrect format
*/
byte[] getRaw() throws AvpDataException;
/**
* @return data as an String (Use AS-ASCI code page)
*
* @throws AvpDataException if data has incorrect format
*/
byte[] getOctetString() throws AvpDataException;
/**
* @return data as an integer
*
* @throws AvpDataException if data has incorrect format
*/
int getInteger32() throws AvpDataException;
/**
* @return data as an unsigned long
*
* @throws AvpDataException if data has incorrect format
*/
long getInteger64() throws AvpDataException;
/**
* @return data as an unsigned integer
*
* @throws AvpDataException if data has incorrect format
*/
long getUnsigned32() throws AvpDataException;
/**
* @return data as an long
*
* @throws AvpDataException if data has incorrect format
*/
long getUnsigned64() throws AvpDataException;
/**
* @return data as an float
*
* @throws AvpDataException if data has incorrect format
*/
float getFloat32() throws AvpDataException;
/**
* @return data as an double
*
* @throws AvpDataException if data has incorrect format
*/
double getFloat64() throws AvpDataException;
/**
* @return data as an Diameter Address (Inet4Address or Inet6Address)
*
* @throws AvpDataException if data has incorrect format
*/
InetAddress getAddress() throws AvpDataException;
/**
* @return data as an Diameter Time (millisecond is truncated)
*
* @throws AvpDataException if data has incorrect format
*/
Date getTime() throws AvpDataException;
/**
* @return data as an String (Use UTF-8 code page)
*
* @throws AvpDataException if data has incorrect format
*/
String getUTF8String() throws AvpDataException;
/**
* @return data as an String (Use AS-ASCI code page)
*
* @throws AvpDataException if data has incorrect format
*/
String getDiameterIdentity() throws AvpDataException;
/**
* @return data as an Diamter URI
*
* @throws AvpDataException if data has incorrect format
*/
URI getDiameterURI() throws AvpDataException;
/**
* @return data as an AVP group.
*
* @throws AvpDataException if data has incorrect format
*/
AvpSet getGrouped() throws AvpDataException;
byte[] getRawData();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/AvpDataException.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* The AvpDataException signals invalid operations on Avp data.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public class AvpDataException extends Exception {
private static final long serialVersionUID = -5898449417016355792L;
protected Avp avp;
/**
* Default constructor
*/
public AvpDataException(Avp avp) {
super();
this.avp = avp;
}
/**
* Constructor with reason string
*
* @param message reason string
*/
public AvpDataException(String message, Avp avp) {
super(message);
this.avp = avp;
}
/**
* Constructor with reason string and parent exception
*
* @param message message reason string
* @param cause parent exception
*/
public AvpDataException(String message, Throwable cause, Avp avp) {
super(message, cause);
this.avp = avp;
}
/**
* Constructor with parent exception
*
* @param cause parent exception
*/
public AvpDataException(Throwable cause, Avp avp) {
super(cause);
this.avp = avp;
}
/**
* Default constructor
*/
public AvpDataException() {
super();
}
/**
* Constructor with reason string
*
* @param message reason string
*/
public AvpDataException(String message) {
super(message);
}
/**
* Constructor with reason string and parent exception
*
* @param message message reason string
* @param cause parent exception
*/
public AvpDataException(String message, Throwable cause) {
super(message, cause);
}
/**
* Constructor with parent exception
*
* @param cause parent exception
*/
public AvpDataException(Throwable cause) {
super(cause);
}
public Avp getAvp() {
return avp;
}
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/AvpSet.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
import java.io.Serializable;
import java.net.InetAddress;
import java.util.Date;
/**
* A set of data representing a message avp set. AvpSet is simple container of avps allows direct access to Avp by Avp
* code or index of Avp. The AvpSet interface provides add/rem methods for appending new Avp and remove Avp from AvpSet.
* Wrapper interface allows adapt message to any driver vendor specific interface Serializable interface allows use this
* class in SLEE Event objects
*
* @author erick.svenson@yahoo.com
* @author Grzegorz Figiel [ProIDS]
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface AvpSet extends Iterable, Serializable, Wrapper {
/**
* get AVP by code
*
* @param avpCode code of Avp
*
* @return Avp instance
*/
Avp getAvp(int avpCode);
/**
* get AVP by position
*
* @param index position of Avp
*
* @return Avp instance
*/
Avp getAvpByIndex(int index);
/**
* get AVP by code
*
* @param avpCode code of Avp
* @param vendorId vendor of Avp
*
* @return Avp instance
*/
Avp getAvp(int avpCode, long vendorId);
/**
* get AVP by code
*
* @param avpCode code of Avp
*
* @return array Avp instance
*/
AvpSet getAvps(int avpCode);
/**
* get AVP by code
*
* @param avpCode code of Avp
* @param vendorId vendor of Avp
*
* @return array Avp instance
*/
AvpSet getAvps(int avpCode, long vendorId);
/**
* Get position of the first instance of the AVP
*
* @param avpCode code of the Avp
*
* @return index (position) of the first occurrence of the Avp. -1 in case Avp is not found
*/
int getAvpIndex(int avpCode);
/**
* Get position of the first instance of the AVP
*
* @param avpCode code of the Avp
* @param vendorId vendorId of the Avp
*
* @return index (position) of the first occurrence of the Avp. -1 in case Avp is not found
*/
int getAvpIndex(int avpCode, long vendorId);
/**
* Remove AVPs with avpCode
*
* @param avpCode code of Avp
*
* @return array of removed Avps instance
*/
AvpSet removeAvp(int avpCode);
/**
* Remove AVPs with avpCode
*
* @param avpCode code of Avp
* @param vendorId code of Vendor
*
* @return array of removed Avps instance
*/
AvpSet removeAvp(int avpCode, long vendorId);
/**
* Remove Avp by Avp index
*
* @param index Avp position
*
* @return Avp instance
*/
Avp removeAvpByIndex(int index);
/**
* Return count of top Avps
*
* @return size of top Avps
*/
int size();
/**
* Return array of avp
*
* @return array of avp
*/
Avp[] asArray();
/**
* Append avp array as value
*
* @param value avp array
*/
void addAvp(Avp... value);
/**
* Append array of avps
*
* @param value avp array from AvpSet container
*/
void addAvp(AvpSet value);
/**
* Append byte[] AVP
*
* @param avpCode code of Avp
* @param value Avp data
*
* @return Avp instance
*/
Avp addAvp(int avpCode, byte[] value);
/**
* Append byte[] AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp addAvp(int avpCode, byte[] value, boolean mFlag, boolean pFlag);
/**
* Append byte[] AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp addAvp(int avpCode, byte[] value, long vendorId, boolean mFlag, boolean pFlag);
/**
* Append int AVP
*
* @param avpCode code of Avp
* @param value Avp data
*
* @return Avp instance
*/
Avp addAvp(int avpCode, int value);
/**
* Append int AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp addAvp(int avpCode, int value, boolean mFlag, boolean pFlag);
/**
* Append int AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp addAvp(int avpCode, int value, long vendorId, boolean mFlag, boolean pFlag);
/**
* Append long(integer64) AVP
*
* @param avpCode code of Avp
* @param value Avp data
*
* @return Avp instance
*/
Avp addAvp(int avpCode, long value);
/**
* Append long(integer64) AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp addAvp(int avpCode, long value, boolean mFlag, boolean pFlag);
/**
* Append long(integer64) AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp addAvp(int avpCode, long value, long vendorId, boolean mFlag, boolean pFlag);
/**
* Append long(integer64) AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param asUnsignedInt32 true if value is unsigned integer 32 type
*
* @return Avp instance
*/
Avp addAvp(int avpCode, long value, boolean asUnsignedInt32);
/**
* Append long(integer64) AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
* @param asUnsignedInt32 true if value is unsigned integer 32 type
*
* @return Avp instance
*/
Avp addAvp(int avpCode, long value, boolean mFlag, boolean pFlag, boolean asUnsignedInt32);
/**
* Append long(integer64) AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
* @param asUnsignedInt32 true if value is unsigned integer 32 type
*
* @return Avp instance
*/
Avp addAvp(int avpCode, long value, long vendorId, boolean mFlag, boolean pFlag, boolean asUnsignedInt32);
/**
* Append float AVP
*
* @param avpCode code of Avp
* @param value Avp data
*
* @return Avp instance
*/
Avp addAvp(int avpCode, float value);
/**
* Append float AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp addAvp(int avpCode, float value, boolean mFlag, boolean pFlag);
/**
* Append float AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp addAvp(int avpCode, float value, long vendorId, boolean mFlag, boolean pFlag);
/**
* Append double(float64) AVP
*
* @param avpCode code of Avp
* @param value Avp data
*
* @return Avp instance
*/
Avp addAvp(int avpCode, double value);
/**
* Append double(float64) AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp addAvp(int avpCode, double value, boolean mFlag, boolean pFlag);
/**
* Append double(float64) AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp addAvp(int avpCode, double value, long vendorId, boolean mFlag, boolean pFlag);
/**
* Append String(UTF-8 or Octet) AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param asOctetString true if it octet string
*
* @return Avp instance
*/
Avp addAvp(int avpCode, String value, boolean asOctetString);
/**
* Append String(UTF-8 or Octet) AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
* @param asOctetString true if it octet string
*
* @return Avp instance
*/
Avp addAvp(int avpCode, String value, boolean mFlag, boolean pFlag, boolean asOctetString);
/**
* Append String(UTF-8 or Octet) AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
* @param asOctetString true if it octet string
*
* @return Avp instance
*/
Avp addAvp(int avpCode, String value, long vendorId, boolean mFlag, boolean pFlag, boolean asOctetString);
/**
* Append URI AVP
*
* @param avpCode code of Avp
* @param value Avp data
*
* @return Avp instance
*/
Avp addAvp(int avpCode, URI value);
/**
* Append URI AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp addAvp(int avpCode, URI value, boolean mFlag, boolean pFlag);
/**
* Append URI AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp addAvp(int avpCode, URI value, long vendorId, boolean mFlag, boolean pFlag);
/**
* Append Address AVP
*
* @param avpCode code of Avp
* @param value Avp data
*
* @return Avp instance
*/
Avp addAvp(int avpCode, InetAddress value);
/**
* Append Address AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp addAvp(int avpCode, InetAddress value, boolean mFlag, boolean pFlag);
/**
* Append Address AVP
*
* @param avpCode code of Avp
* @param value Avp data
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp addAvp(int avpCode, InetAddress value, long vendorId, boolean mFlag, boolean pFlag);
/**
* Append Diameter Time AVP
*
* @param avpCode code of Avp
* @param date value
*
* @return Avp instance
*/
Avp addAvp(int avpCode, Date date);
/**
* Append Diameter Time AVP
*
* @param avpCode code of Avp
* @param date value
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp addAvp(int avpCode, Date date, boolean mFlag, boolean pFlag);
/**
* Append Diameter Time AVP
*
* @param avpCode code of Avp
* @param date value
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp addAvp(int avpCode, Date date, long vendorId, boolean mFlag, boolean pFlag);
/**
* Append Grouped AVP
*
* @param avpCode code of Avp
*
* @return AvpSet instance
*/
AvpSet addGroupedAvp(int avpCode);
/**
* Append Grouped AVP
*
* @param avpCode code of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return AvpSet instance
*/
AvpSet addGroupedAvp(int avpCode, boolean mFlag, boolean pFlag);
/**
* Append Grouped AVP
*
* @param avpCode code of Avp
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return AvpSet instance
*/
AvpSet addGroupedAvp(int avpCode, long vendorId, boolean mFlag, boolean pFlag);
/**
* Insert AvpSet
*
* @param index index of inserted avp
* @param value avp array
*/
void insertAvp(int index, Avp... value);
/**
* Insert AvpSet
*
* @param index index of inserted avp
* @param value avp array from AvpSet container
*/
void insertAvp(int index, AvpSet value);
/**
* Insert byte[] AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, byte[] value);
/**
* Insert byte[] AVP
*
* @param avpCode code of Avp
* @param index index of inserted avp
* @param value Avp data
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, byte[] value, boolean mFlag, boolean pFlag);
/**
* Insert byte[] AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, byte[] value, long vendorId, boolean mFlag, boolean pFlag);
/**
* Insert int AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, int value);
/**
* Insert int AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, int value, boolean mFlag, boolean pFlag);
/**
* Insert int AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, int value, long vendorId, boolean mFlag, boolean pFlag);
/**
* Insert long(integer64) AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, long value);
/**
* Insert long(integer64) AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, long value, boolean mFlag, boolean pFlag);
/**
* Insert long(integer64) AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, long value, long vendorId, boolean mFlag, boolean pFlag);
/**
* Insert long(integer64) AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
* @param asUnsignedInt32 true if value is unisignet integer 32 type
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, long value, boolean asUnsignedInt32);
/**
* Insert long(integer64) AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
* @param asUnsignedInt32 true if value is unisignet integer 32 type
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, long value, boolean mFlag, boolean pFlag, boolean asUnsignedInt32);
/**
* Insert long(integer64) AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
* @param asUnsignedInt32 true if value is unisignet integer 32 type
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, long value, long vendorId, boolean mFlag, boolean pFlag, boolean asUnsignedInt32);
/**
* Insert float AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, float value);
/**
* Insert float AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, float value, boolean mFlag, boolean pFlag);
/**
* Insert float AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, float value, long vendorId, boolean mFlag, boolean pFlag);
/**
* Insert double(float64) AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, double value);
/**
* Insert double(float64) AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, double value, boolean mFlag, boolean pFlag);
/**
* Insert double(float64) AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, double value, long vendorId, boolean mFlag, boolean pFlag);
/**
* Insert String(UTF-8 or Octet) AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
* @param asOctetString true if it octet string
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, String value, boolean asOctetString);
/**
* Insert String(UTF-8 or Octet) AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
* @param asOctetString true if it octet string
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, String value, boolean mFlag, boolean pFlag, boolean asOctetString);
/**
* Insert String(UTF-8 or Octet) AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
* @param asOctetString true if it octet string
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, String value, long vendorId, boolean mFlag, boolean pFlag, boolean asOctetString);
/**
* Insert URI AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, URI value);
/**
* Insert URI AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, URI value, boolean mFlag, boolean pFlag);
/**
* Insert URI AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, URI value, long vendorId, boolean mFlag, boolean pFlag);
/**
* Insert Address AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, InetAddress value);
/**
* Insert Address AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, InetAddress value, boolean mFlag, boolean pFlag);
/**
* Insert Address AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param value Avp data
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, InetAddress value, long vendorId, boolean mFlag, boolean pFlag);
/**
* Insert Diameter Time AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param date value
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, Date date);
/**
* Insert Diameter Time AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param date value
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, Date date, boolean mFlag, boolean pFlag);
/**
* Insert Diameter Time AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param date value
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return Avp instance
*/
Avp insertAvp(int index, int avpCode, Date date, long vendorId, boolean mFlag, boolean pFlag);
/**
* Insert Grouped AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
*
* @return AvpSet instance
*/
AvpSet insertGroupedAvp(int index, int avpCode);
/**
* Insert Grouped AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return AvpSet instance
*/
AvpSet insertGroupedAvp(int index, int avpCode, boolean mFlag, boolean pFlag);
/**
* Insert Grouped AVP
*
* @param index index of inserted avp
* @param avpCode code of Avp
* @param vendorId vendor of Avp
* @param mFlag true set M flag/false clear M flag in header Avp
* @param pFlag true set P flag/false clear P flag in header Avp
*
* @return AvpSet instance
*/
AvpSet insertGroupedAvp(int index, int avpCode, long vendorId, boolean mFlag, boolean pFlag);
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/BaseSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* The session delivery objects are responsible for delivering all incoming Message to a specific session. It determines
* the Diameter Session object that the message belongs to by querying the message's session id AVP. The delivery object
* searches the local session database for a matching session. If no matching session is found, the delivery object will
* lookup a matching session factory object that has an application id matching the application id of the message. If
* there is a registered session factory, then the delivery object will ask the factory to create a new session and
* delivery the message to the newly created session. If non of these lookup's are successful, the session delivery
* object will silently discard the message. Wrapper interface allows adapt message to any driver vendor specific
* interface Serializable interface allows use this class in SLEE Event objects
*
* @author erick.svenson@yahoo.com
* @author artem.litvinov@gmail.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface BaseSession {
/**
* Returns the time when this session was created (milliseconds) Start point of time January 1, 1970 GMT.
*
* @return long specifying when this session was created
*/
long getCreationTime();
/**
* Returns the last time an event occurred on this session (milliseconds) Start point of time January 1, 1970 GMT.
*
* @return long specifying when last time an event occurred on this session
*/
long getLastAccessedTime();
/**
* Return true if session is not released
*
* @return true if session is not released
*/
boolean isValid();
/**
* Release all resources append to session
*/
void release();
/**
* Indicates if this is an App Session or a raw/base session
*
* @return
*/
boolean isAppSession();
/**
* Indicates if the session is replicable
*
* @return
*/
boolean isReplicable();
/**
* @return session-id as String (Session-Id AVP)
*/
String getSessionId();
String IDLE_SESSION_TIMER_NAME = "IDLE_SESSION_TIMER";
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/Configuration.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* Stack properties for working. This interface equals IMemento interface from Eclispe (pattern Memento). It interface
* hideWay of a storage of stack properties (XML file ant etc)
*
* @author erick.svenson@yahoo.com
* @author artem.litvinov@gmail.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface Configuration {
/**
* Returns the Byte point value of the given key.
*
* @param key the key
* @param defaultValue the Default Value
* @return the value, or defValue if the key was not found or was found but was not a Byte point number
*/
byte getByteValue(int key, byte defaultValue);
/**
* Returns the Integer point value of the given key.
*
* @param key the key
* @param defaultValue the Default Value
* @return the value, or defaultValue if the key was not found or was found but was not a Integer point
* number
*/
int getIntValue(int key, int defaultValue);
/**
* Returns the long point value of the given key.
*
* @param key the key
* @param defaultValue the Default Value
* @return the value, or defaultValue if the key was not found or was found but was not a long point
* number
*/
long getLongValue(int key, long defaultValue);
/**
* Returns the double point value of the given key.
*
* @param key the key
* @param defaultValue the Default Value
* @return the value, or defaultValue if the key was not found or was found but was not a double point
* number
*/
double getDoubleValue(int key, double defaultValue);
/**
* Returns the byte[] point value of the given key.
*
* @param key the key
* @param defaultValue the Default Value
* @return the value, or defaultValue if the key was not found or was found but was not a byte[] point
* number
*/
byte[] getByteArrayValue(int key, byte[] defaultValue);
/**
* Returns the boolean point value of the given key.
*
* @param key the key
* @param defaultValue the Default Value
* @return the value, or defaultValue if the key was not found or was found but was not a boolean point
* number
*/
boolean getBooleanValue(int key, boolean defaultValue);
/**
* Returns the String point value of the given key.
*
* @param key the key
* @param defaultValue the Default Value
* @return the value, or defaultValue if the key was not found or was found but was not a String point
* number
*/
String getStringValue(int key, String defaultValue);
/**
* @param key key of attribute
* @return true if value of parameter is not null
*/
boolean isAttributeExist(int key);
/**
* Returns all children with the given type id.
*
* @param key the type id
* @return an array of children with the given type
*/
Configuration[] getChildren(int key);
/**
* Returns the Object piont value for the given key
*
* @param key the key
* @return the value
*/
Object getValue(int key);
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/ConfigurationListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* The listener interface for receiving runtime configuration changes events.
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface ConfigurationListener {
/**
* Invoked when an changes is occurs.
*
* @param key index of changed element
* @param newValue new value
*
* @return true if new value is applied
*/
boolean elementChanged(int key, Object newValue);
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/DisconnectCause.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* Interface defining disconnect cause codes
*
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface DisconnectCause {
/**
* A scheduled reboot is imminent.
*/
int REBOOTING = 0;
/**
* The peer's internal resources are constrained, and it has determined that the transport connection needs to be
* closed.
*/
int BUSY = 1;
/**
* The peer has determined that it does not see a need for the transport connection to exist, since it does not
* expect any messages to be exchanged in the near future.
*/
int DO_NOT_WANT_TO_TALK_TO_YOU = 2;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/EventListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* Common event listener
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface EventListener {
/**
* Notifies this Listener that stack has received diameter answer message. For network requests - answer parameter
* is null
*
* @param request the request message
* @param answer the answer on application request
*/
void receivedSuccessMessage(R request, A answer);
/**
* Notifies this Listener that the request has timeout.
*
* @param request the request has timeout
*/
void timeoutExpired(R request);
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/IllegalDiameterStateException.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* Signals that a method has been invoked at an illegal or inappropriate time.
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public class IllegalDiameterStateException extends Exception {
private static final long serialVersionUID = 1L;
public IllegalDiameterStateException() {
}
public IllegalDiameterStateException(String message) {
super(message);
}
public IllegalDiameterStateException(String message, Throwable cause) {
super(message, cause);
}
public IllegalDiameterStateException(Throwable cause) {
super(cause);
}
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/InternalException.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* An exception that provides information on a stack error or other errors.
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public class InternalException extends Exception {
private static final long serialVersionUID = 1L;
/**
* Default constructor
*/
public InternalException() {
super();
}
/**
* Constructor with reason string
*
* @param message reason string
*/
public InternalException(String message) {
super(message);
}
/**
* Constructor with reason string and parent exception
*
* @param message message reason string
* @param cause parent exception
*/
public InternalException(String message, Throwable cause) {
super(message, cause);
}
/**
* Constructor with parent exception
*
* @param cause parent exception
*/
public InternalException(Throwable cause) {
super(cause);
}
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/LocalAction.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* This Enum class defines commCode of realm local actions
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
public enum LocalAction {
LOCAL,
RELAY,
PROXY,
REDIRECT
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/Message.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
import java.io.Serializable;
import java.util.List;
/**
* A Diameter message is either a request from a client to a server, or a response from a server to a client. Both
* Request and Answer messages use the basic format of RFC 3588 Wrapper interface allows adapt message to any driver
* vendor specific interface The message must support adaptable operation to Answer and Request interfaces Serializable
* interface allows use this class in SLEE Event objects
*
* @author erick.svenson@yahoo.com
* @author artem.litvinov@gmail.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface Message extends Wrapper, Serializable {
/**
* The Abort-Session-Request message code
*/
int ABORT_SESSION_REQUEST = 274;
/**
* The Abort-Session-Answer message code
*/
int ABORT_SESSION_ANSWER = 274;
/**
* The Accounting-Request message code
*/
int ACCOUNTING_REQUEST = 271;
/**
* The Accounting-Answer message code
*/
int ACCOUNTING_ANSWER = 271;
/**
* The Capabilities-Exchange-Request message code
*/
int CAPABILITIES_EXCHANGE_REQUEST = 257;
/**
* The Capabilities-Exchange-Answer message code
*/
int CAPABILITIES_EXCHANGE_ANSWER = 257;
/**
* The Device-Watchdog-Request message code
*/
int DEVICE_WATCHDOG_REQUEST = 280;
/**
* The Device-Watchdog-Answer message code
*/
int DEVICE_WATCHDOG_ANSWER = 280;
/**
* The Disconnect-Peer-Request message code
*/
int DISCONNECT_PEER_REQUEST = 282;
/**
* The Disconnect-Peer-Answer message code
*/
int DISCONNECT_PEER_ANSWER = 282;
/**
* The Re-Auth-Request message code
*/
int RE_AUTH_REQUEST = 258;
/**
* The Re-Auth-Answer message code
*/
int RE_AUTH_ANSWER = 258;
/**
* The Session-Termination-Request message code
*/
int SESSION_TERMINATION_REQUEST = 275;
/**
* The Session-Termination-Answer message code
*/
int SESSION_TERMINATION_ANSWER = 275;
/**
* @return version of message (version filed in header)
*/
byte getVersion();
/**
* @return value of R bit from header of message
*/
boolean isRequest();
/**
* Set 1 or 0 to R bit field of header
*
* @param value true == 1 or false = 0
*/
void setRequest(boolean value);
/**
* @return value of P bit from header of message
*/
boolean isProxiable();
/**
* Set 1 or 0 to P bit field of header
*
* @param value true == 1 or false = 0
*/
void setProxiable(boolean value);
/**
* @return value of E bit from header of message
*/
boolean isError();
/**
* Set 1 or 0 to E bit field of header
*
* @param value true == 1 or false = 0
*/
void setError(boolean value);
/**
* @return value of T bit from header of message
*/
boolean isReTransmitted();
/**
* Set 1 or 0 to T bit field of header
*
* @param value true == 1 or false = 0
*/
void setReTransmitted(boolean value);
/**
* @return command code from header of message
*/
int getCommandCode();
/**
* Return message Session Id avp Value (null if avp not set)
*
* @return session id avp of message
*/
String getSessionId();
/**
* Return ApplicationId value from message header
*
* @return ApplicationId value from message header
*/
long getApplicationId();
/**
* Returns ordered list of Application-Id avps (Auth-Application-Id, Acc-Appplication-Id and
* Vendor-Specific-Application-Id avps) from message
*
* @return list of Application-Id avps
*/
List getApplicationIdAvps();
/**
* The Hop-by-Hop Identifier is an unsigned 32-bit integer field (in network byte order) and aids in matching
* requests and replies. The sender MUST ensure that the Hop-by-Hop identifier in a request is unique on a given
* connection at any given time, and MAY attempt to ensure that the number is unique across reboots.
*
* @return hop by hop identifier from header of message
*/
long getHopByHopIdentifier();
/**
* The End-to-End Identifier is an unsigned 32-bit integer field (in network byte order) and is used to detect
* duplicate messages. Upon reboot implementations MAY set the high order 12 bits to contain the low order 12 bits
* of current time, and the low order 20 bits to a random value. Senders of request messages MUST insert a unique
* identifier on each message.
*
* @return end to end identifier from header of message
*/
long getEndToEndIdentifier();
/**
* @return Set of message Avps
*/
AvpSet getAvps();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/MetaData.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* This interface is implemented by sack vendors to let users know the local properties of a Diameter Stack
* implementation and current instance.
*
* @author erick.svenson@yahoo.com
* @author artem.litvinov@gmail.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface MetaData extends Wrapper {
/**
* @return Retrieves the stack's major version number.
*/
int getMajorVersion();
/**
* @return Retrieves the stack's minor version number.
*/
int getMinorVersion();
/**
* @return stack type
*/
StackType getStackType();
/**
* @return information about local instance of peer
*/
Peer getLocalPeer();
/**
* Return configuration parameters
*
* @return configuration
*/
Configuration getConfiguration();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/Mode.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* This enumerated class define type of stack start condition
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
public enum Mode {
ANY_PEER,
ALL_PEERS
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/MutableConfiguration.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* This interface is the extended version of the interface configuration and allows to receive of a notification about
* reconfigurations
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface MutableConfiguration extends Configuration {
/**
* Set byte value to configuration
*
* @param key key of value
* @param value byte value
*/
void setByteValue(int key, byte value);
/**
* Set int value to configuration
*
* @param key key of value
* @param value int value
*/
void setIntValue(int key, int value);
/**
* Set long value to configuration
*
* @param key key of value
* @param value long value
*/
void setLongValue(int key, long value);
/**
* Set double value to configuration
*
* @param key key of value
* @param value double value
*/
void setDoubleValue(int key, double value);
/**
* Set byte array value to configuration
*
* @param key key of value
* @param value byte array value
*/
void setByteArrayValue(int key, byte[] value);
/**
* Set boolean value to configuration
*
* @param key key of value
* @param value boolean value
*/
void setBooleanValue(int key, boolean value);
/**
* Set string value to configuration
*
* @param key key of value
* @param value string value
*/
void setStringValue(int key, String value);
/**
* Set children to configuration
*
* @param key key of children
* @param value children value
*/
void setChildren(int key, Configuration... value);
/**
* Remove defined key
*
* @param key array keys of removed entry
*/
void removeValue(int... key);
/**
* Add change configuration listener
*
* @param listener instance of listener
* @param keys array of observed propertie's keys if keys.length == 0 then observed all properties of
* configuration node
*/
void addChangeListener(ConfigurationListener listener, int... keys);
/**
* Remove change configuration listener
*
* @param listener instance of listener
* @param keys array of removed listener's keys
*/
void removeChangeListener(ConfigurationListener listener, int... keys);
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/MutablePeerTable.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* This interface extends PeerTable interface and append some operation for controls peer and realm table
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface MutablePeerTable extends PeerTable {
/**
* Return peer statistics
*
* @param peerHost host of peer
*
* @return peer statistics
*/
Statistic getStatistic(String peerHost);
/**
* Append peer table listener
*
* @param listener listener instance
*/
void setPeerTableListener(PeerTableListener listener);
/**
* Add new peer to peer table
*
* @param peer URI of peer (host, port and other connection information) for example:
* aaa://host.example.com:6666;transport=tcp;protocol=diameter
* @param realmName name of realm
* @param connecting attempt connect
*
* @return peer instance
*/
Peer addPeer(URI peer, String realmName, boolean connecting);
/**
* Remove peer from peer table
*
* @param peerHost host of peer
*
* @return removed peer instance
*/
Peer removePeer(String peerHost);
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/Network.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* This interface introduces a capability to work with a network. You can get instance of this interface over stack
* instance:
*
* if (stack.isWrapperFor(Network.class)) { Network netWork = stack.unwrap(Network.class); ..... }
*
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface Network extends Wrapper {
/**
* Return local peer network statistics
*
* @return network statistics
*/
Statistic getStatistic();
/**
* Register listener for processing network requests
*
* @param applicationId application Id
* @param listener request listener
*
* @throws ApplicationAlreadyUseException if listener with predefined appId already append to network
*/
void addNetworkReqListener(NetworkReqListener listener, ApplicationId... applicationId)
throws ApplicationAlreadyUseException;
/**
* Register listener for processing network requests
*
* @param selector application selector
* @param listener request listener
*/
void addNetworkReqListener(NetworkReqListener listener, Selector... selector);
/**
* Remove request listener
*
* @param applicationId application id of listener
*/
void removeNetworkReqListener(ApplicationId... applicationId);
/**
* Remove request listener
*
* @param selector selector of application
*/
void removeNetworkReqListener(Selector... selector);
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/NetworkReqListener.java
================================================
/*
* JBoss, Home of Professional Open Source
* Copyright 2006, 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.jdiameter.api;
/**
* The NetworkReqListener interface is used to process network requests. This listener can be attach to session or to
* network class instances
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface NetworkReqListener {
/**
* This method use for process new network requests.
*
* @param request request message
*
* @return answer immediate answer message. Method may return null and an Answer will be sent later on
*/
Answer processRequest(Request request);
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/OverloadException.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* An exception that provides information on a stack has application request overload.
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public class OverloadException extends Exception {
private static final long serialVersionUID = 1L;
double lowThreshold, highThreshold, value;
/**
* Default constructor
*/
public OverloadException() {
super();
}
/**
* Constructor with overload data
*
* @param lowThreshold low threshold overload value
* @param highThreshold high threshold overload value
* @param value current overload value
*/
public OverloadException(double lowThreshold, double highThreshold, double value) {
this.lowThreshold = lowThreshold;
this.highThreshold = highThreshold;
this.value = value;
}
/**
* Constructor with reason string
*
* @param message reason string
*/
public OverloadException(String message) {
super(message);
}
/**
* Constructor with reason string and parent exception
*
* @param message message reason string
* @param cause parent exception
*/
public OverloadException(String message, Throwable cause) {
super(message, cause);
}
/**
* Constructor with parent exception
*
* @param cause parent exception
*/
public OverloadException(Throwable cause) {
super(cause);
}
/**
* @return current low threshold overload value
*/
public double getLowThreshold() {
return lowThreshold;
}
/**
* @return current high threshold overload value
*/
public double getHighThreshold() {
return highThreshold;
}
/**
* @return current overload value
*/
public double getValue() {
return value;
}
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/OverloadListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* This class allows processed stack overloaded notification
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface OverloadListener {
/**
* Notifies this OverloadListener that the stack has overload.
*
* @param peer listening peer
* @param value value of overload
*/
void overloadDetected(URI peer, double value);
/**
* Notifies this OverloadListener that the stack has overload cased
*
* @param peer listening peer
*/
void overloadCeased(URI peer);
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/OverloadManager.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* This interface allows to control the stack at overload moment
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface OverloadManager {
/**
* Notify stack that parent application has overload
*
* @param id Overloaded application id (null for stack owner)
* @param type type of overload (CPU, Memory..)
* @param value value of overload
*/
void parentAppOverloadDetected(ApplicationId id, int type, double value);
/**
* Notifies stack that parent application has overload cased
*
* @param id Overloaded application id (null for stack owner)
* @param type type of overload (CPU, Memory..)
*/
void parentAppOverloadCeased(ApplicationId id, int type);
/**
* Append overload listener
*
* @param listener overload listener instance
* @param lowThreshold low value of overload threshold (for example 0.8 - 1.0 is overload Range)
* @param highThreshold high value of overload threshold (for example 0.8 - 1.0 is overload Range)
* @param qIndex overload element index
*/
void addOverloadListener(OverloadListener listener, double lowThreshold, double highThreshold, int qIndex);
/**
* Remove overload listener
*
* @param listener overload listener instance
* @param qIndex overload element index
*/
void removeOverloadListener(OverloadListener listener, int qIndex);
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/Peer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
import java.io.IOException;
import java.net.InetAddress;
import java.util.Set;
/**
* Peer contains everything that is worth knowing about a peer and define some operation for working with this peer.
*
* @author erick.svenson@yahoo.com
* @author artem.litvinov@gmail.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface Peer {
/**
* Establishes a connection towards a remote peer.
*
* @throws IllegalDiameterStateException
*/
void connect() throws InternalException, IOException, IllegalDiameterStateException;
/**
* Close the connection to the peer.
*
* @throws IllegalDiameterStateException
*/
void disconnect(int disconnectCause) throws InternalException, IllegalDiameterStateException;
/**
* All implementations must support PeerState interface as argument
*
* @return state of peer
*/
E getState(Class enumc);
/**
* @return URI of peer
*/
URI getUri();
/**
* @return array of peer ip addresses
*/
InetAddress[] getIPAddresses();
/**
* @return Realm name of peer
*/
String getRealmName();
/**
* @return vendor id of peer stack implementation
*/
long getVendorId();
/**
* @return product name of peer stack implementation
*/
String getProductName();
/**
* @return firmware version of peer stack implementation
*/
long getFirmware();
/**
* @return set of common Application-id of peer;
*/
Set getCommonApplications();
/**
* Append peer state change listener to the peer manager
*
* @param listener listener instance
*/
void addPeerStateListener(PeerStateListener listener);
/**
* Remove peer state change listener from the peer manager
*
* @param listener listener instance
*/
void removePeerStateListener(PeerStateListener listener);
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/PeerState.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* This enumerated class define Peer states. More information you can read on document "Authentication, Authorization
* and Accounting (AAA) Transport Profile"
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
public enum PeerState {
OKAY,
SUSPECT,
DOWN,
REOPEN,
INITIAL
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/PeerStateListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* This interface is used to inform about changes in the state for a given peer.
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface PeerStateListener {
/**
* A change of state has occurred for a peer.
*
* @param oldState old state of peer
* @param newState new state of peer
*/
void stateChanged(PeerState oldState, PeerState newState);
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/PeerTable.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
import java.util.List;
/**
* PeerManager is Diameter Stack PCB(RFC 3588) realization. Wrapper interface allows adapt message to any driver vendor
* specific interface. List of wrapper classes: - Server API : Network, MutablePeerTable
*
* @author erick.svenson@yahoo.com
* @author artem.litvinov@gmail.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface PeerTable extends Wrapper {
/**
* Return peer by host name
*
* @param peerHost host name
*
* @return peer
*/
Peer getPeer(String peerHost);
/**
* Return no mutable list of peers
*
* @return List of current stack known peers
*/
List getPeerTable();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/PeerTableListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* This interface is used to inform about changes in the peer table.
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface PeerTableListener {
/**
* This method notified about adding a new peer to peer table
*
* @param peer peer instance
*/
void peerAccepted(Peer peer);
/**
* This method notified about removing a peer from peer table
*
* @param peer peer instance
*/
void peerRemoved(Peer peer);
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/RawSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
/**
* This interface append to base interface specific methods for creating and send raw diameter messages
*
* @author erick.svenson@yahoo.com
* @author artem.litvinov@gmail.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface RawSession extends BaseSession, Wrapper {
/**
* Returns a new message object with the specified command code, applicationId and predefined avps.
*
* @param commandCode code of message
* @param applicationId applicationId of destination application
* @param avp array of avps
*
* @return new message object
*/
Message createMessage(int commandCode, ApplicationId applicationId, Avp... avp);
/**
* Returns a new message object with the predefined Command-code, ApplicationId, HopByHopIdentifier,
* EndToEndIdentifier This method allow created message from storage or created specific message.
*
* @param commandCode code of message
* @param applicationId applicationId of destination application
* @param hopByHopIdentifier hop by hop identifier of message
* @param endToEndIdentifier end to end identifier of message
* @param avp array of avps
*
* @return new message object
*/
Message createMessage(int commandCode, ApplicationId applicationId, long hopByHopIdentifier, long endToEndIdentifier,
Avp... avp);
/**
* Returns a new message object with the copy of parent message header
*
* @param message origination message
* @param copyAvps if true all avps will be copy to new message
*
* @return Returns a new message object with the copy of parent message header
*/
Message createMessage(Message message, boolean copyAvps);
/**
* Sends and wait response message with default timeout
*
* @param message request/answer diameter message
* @param listener event listener
*
* @throws org.jdiameter.api.InternalException The InternalException signals that internal error is
* occurred.
* @throws org.jdiameter.api.IllegalDiameterStateException The IllegalStateException signals that session has
* incorrect state (invalid).
* @throws org.jdiameter.api.RouteException The NoRouteException signals that no route exist for a
* given realm.
* @throws org.jdiameter.api.OverloadException The OverloadException signals that destination host is
* overloaded.
*/
void send(Message message, EventListener listener)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Sends and wait response message with defined timeout
*
* @param message request/answer diameter message
* @param listener event listener
* @param timeOut value of timeout
* @param timeUnit type of timeOut value
*
* @throws org.jdiameter.api.InternalException The InternalException signals that internal error is
* occurred.
* @throws org.jdiameter.api.IllegalDiameterStateException The IllegalStateException signals that session has
* incorrect state (invalid).
* @throws org.jdiameter.api.RouteException The NoRouteException signals that no route exist for a
* given realm.
* @throws org.jdiameter.api.OverloadException The OverloadException signals that destination host is
* overloaded.
*/
void send(Message message, EventListener listener, long timeOut, TimeUnit timeUnit)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Sends and wait response message with default timeout
*
* @param message request/answer diameter message
*
* @return InFuture result of an asynchronous operation
*
* @throws org.jdiameter.api.InternalException The InternalException signals that internal error is
* occurred.
* @throws org.jdiameter.api.IllegalDiameterStateException The IllegalStateException signals that session has
* incorrect state (invalid).
* @throws org.jdiameter.api.RouteException The NoRouteException signals that no route exist for a
* given realm.
* @throws org.jdiameter.api.OverloadException The OverloadException signals that destination host is
* overloaded.
*/
Future send(Message message)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Sends and wait response message with defined timeout
*
* @param message request/answer diameter message
* @param timeOut value of timeout
* @param timeUnit type of timeOut value
*
* @return InFuture result of an asynchronous operation
*
* @throws org.jdiameter.api.InternalException The InternalException signals that internal error is
* occurred.
* @throws org.jdiameter.api.IllegalDiameterStateException The IllegalStateException signals that session has
* incorrect state (invalid).
* @throws org.jdiameter.api.RouteException The NoRouteException signals that no route exist for a
* given realm.
* @throws org.jdiameter.api.OverloadException The OverloadException signals that destination host is
* overloaded.
*/
Future send(Message message, long timeOut, TimeUnit timeUnit)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/Realm.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* Base Realm interface.
*
* @author erick.svenson@yahoo.com
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface Realm {
/**
* Return name of this realm
*
* @return name
*/
String getName();
/**
* Return applicationId associated with this realm
*
* @return applicationId
*/
ApplicationId getApplicationId();
/**
* Return realm local action for this realm
*
* @return realm local action
*/
LocalAction getLocalAction();
/**
* Return true if this realm is dynamic updated
*
* @return true if this realm is dynamic updated
*/
boolean isDynamic();
/**
* Return expiration time for this realm in milisec
*
* @return expiration time
*/
long getExpirationTime();
/**
* Returns true if realm is local. Local means that it is defined as local(not action) realm for this peer.
*
* @return
*/
boolean isLocal();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/RealmTable.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* This interface introduces a capability to work with a network. You can get instance of this interface over stack
* instance:
*
* if (stack.isWrapperFor(RealmTable.class)) { RealmTable realmTabke = stack.unwrap(RealmTable.class); ..... }
*
*
* @author erick.svenson@yahoo.com
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface RealmTable extends Wrapper {
/**
* Return different network statistics
*
* @param realmName realmName
*
* @return network statistics
*/
Statistic getStatistic(String realmName);
/**
* Add new realm to realm table
*
* @param realmName name of realm
* @param applicationId application id of realm
* @param action action of realm
* @param agentConfiguration resource for configuration of action dependent agent, may be null.
* @param dynamic commCode of realm
* @param expTime expiration time of realm
* @param extraConf - additional configuration which may be used by implementation
*
* @return instance of created realm
*
* @throws InternalException - when realm definition under pKey and sKey exist
*/
Realm addRealm(String realmName, ApplicationId applicationId, LocalAction action, String agentConfiguration,
boolean dynamic, long expTime, String[] hosts)
throws InternalException;
/**
* Checks if there is such realm entry.
*
* @param realmName
*
* @return
*/
boolean realmExists(String realmName);
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/Request.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* A Diameter Request is a request from a client to a server (or server to client - network request).
*
* @author erick.svenson@yahoo.com
* @author artem.litvinov@gmail.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface Request extends Message {
/**
* @return true if it is network request
*/
boolean isNetworkRequest();
/**
* Creates an answer for this request with the specified result code. Header and system AVPs from request are copied
* to answer.
*
* @param resultCode result code of answer
*
* @return answer object instance
*/
Answer createAnswer(long resultCode);
/**
* Creates an answer for this request with the specified experimental result code. Header and system AVPs from
* request are copied to answer.
*
* @param vendorId vendorId
* @param experimentalResultCode experimental result code of answer
*
* @return answer object instance
*/
Answer createAnswer(long vendorId, long experementalResultCode);
/**
* Creates answer for this request. Header and system AVPs from request are copied to answer.
*
* @return
*/
Answer createAnswer();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/ResultCode.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* This interface describe basic result codes
*
* @author erick.svenson@yahoo.com
* @author artem.litvinov@gmail.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface ResultCode {
/**
* This informational error is returned by a Diameter server to inform the access device that the authentication
* mechanism being used requires multiple round trips, and a subsequent request needs to be issued in order for
* access to be granted.
*/
int MULTI_ROUND_AUTH = 1001;
/**
* The Request was successfully completed.
*/
int SUCCESS = 2001;
/**
* When returned, the request was successfully completed, but additional processing is required by the application
* in order to provide service to the user.
*/
int LIMITED_SUCCESS = 2002;
/**
* The Request contained a Command-Code that the receiver did not recognize or support. This MUST be used when a
* Diameter node receives an experimental command that it does not understand.
*/
int COMMAND_UNSUPPORTED = 3001;
/**
* This error is given when Diameter can not deliver the message to the destination, either because no host within
* the realm supporting the required application was available to process the request, or because Destination-Host
* AVP was given without the associated Destination-Realm AVP
*/
int UNABLE_TO_DELIVER = 3002;
/**
* The intended realm of the request is not recognized.
*/
int REALM_NOT_SERVED = 3003;
/**
* When returned, a Diameter node SHOULD attempt to send the message to an alternate peer. This error MUST only be
* used when a specific server is requested, and it cannot provide the requested service.
*/
int TOO_BUSY = 3004;
/**
* An agent detected a loop while trying to get the message to the intended recipient. The message MAY be sent to
* an alternate peer, if one is available, but the peer reporting the error has identified a configuration problem.
*/
int LOOP_DETECTED = 3005;
/**
* A redirect agent has determined that the request could not be satisfied locally and the initiator of the request
* should direct the request directly to the server, whose contact information has been added to the response. When
* set, the Redirect-Host AVP MUST be present.
*/
int REDIRECT_INDICATION = 3006;
/**
* A request was sent for an application that is not supported.
*/
int APPLICATION_UNSUPPORTED = 3007;
/**
* A request was received whose bits in the Diameter header were either set to an invalid combination, or to a value
* that is inconsistent with the command code's definition.
*/
int INVALID_HDR_BITS = 3008;
/**
* A request was received that included an AVP whose flag bits are set to an unrecognized value, or that is
* inconsistent with the AVP's definition.
*/
int INVALID_AVP_BITS = 3009;
/**
* A CER was received from an unknown peer.
*/
int UNKNOWN_PEER = 3010;
/**
* The authentication process for the user failed, most likely due to an invalid password used by the user. Further
* attempts MUST only be tried after prompting the user for a new password.
*/
int AUTHENTICATION_REJECTED = 4001;
/**
* A Diameter node received the accounting request but was unable to commit it to stable storage due to a temporary
* lack of space.
*/
int OUT_OF_SPACE = 4002;
/**
* The peer has determined that it has lost the election process and has therefore disconnected the transport
* connection.
*/
int ELECTION_LOST = 4003;
/**
* Request denied because the end user's account could not cover the requested service
*/
int CREDIT_CONTROL_LIMIT_REACHED = 4012;
/**
* The peer received a message that contained an AVP that is not recognized or supported and was marked with the
* Mandatory bit. A Diameter message with this error MUST contain one or more Failed- AVP AVP containing the AVPs
* that caused the failure.
*/
int AVP_UNSUPPORTED = 5001;
/**
* The request contained an unknown Session-Id.
*/
int UNKNOWN_SESSION_ID = 5002;
/**
* A request was received for which the user could not be authorized. This error could occur if the service
* requested is not permitted to the user.
*/
int AUTHORIZATION_REJECTED = 5003;
/**
* The request contained an AVP with an invalid value in its data portion. A Diameter message indicating this error
* MUST include the offending AVPs within a Failed-AVP AVP.
*/
int INVALID_AVP_VALUE = 5004;
/**
* The request did not contain an AVP that is required by the Command Code definition. If this value is sent in the
* Result-Code AVP, a Failed-AVP AVP SHOULD be included in the message. The Failed-AVP AVP MUST contain an example
* of the missing AVP complete with the Vendor-Id if applicable. The value field of the missing AVP should be of
* correct minimum length and contain zeroes.
*/
int MISSING_AVP = 5005;
/**
* A request was received that cannot be authorized because the user has already expended allowed resources. An
* example of this error condition is a user that is restricted to one dial-up PPP port, attempts to establish a
* second PPP connection.
*/
int RESOURCES_EXCEEDED = 5006;
/**
* The Home Diameter server has detected AVPs in the request that contradicted each other, and is not willing to
* provide service to the user. One or more Failed-AVP AVPs MUST be present, containing the AVPs that contradicted
* each other.
*/
int CONTRADICTING_AVPS = 5007;
/**
* A message was received with an AVP that MUST NOT be present. The Failed-AVP AVP MUST be included and contain a
* copy of the offending AVP.
*/
int AVP_NOT_ALLOWED = 5008;
/**
* A message was received that included an AVP that appeared more often than permitted in the message definition.
* The Failed-AVP AVP MUST be included and contain a copy of the first instance of the offending AVP that exceeded
* the maximum number of occurrences
*/
int AVP_OCCURS_TOO_MANY_TIMES = 5009;
/**
* This error is returned when a CER message is received, and there are no common applications supported between the
* peers.
*/
int NO_COMMON_APPLICATION = 5010;
/**
* This error is returned when a request was received, whose version number is unsupported.
*/
int UNSUPPORTED_VERSION = 5011;
/**
* This error is returned when a request is rejected for unspecified reasons.
*/
int UNABLE_TO_COMPLY = 5012;
/**
* This error is returned when an unrecognized bit in the Diameter header is set to one (1).
*/
int INVALID_BIT_IN_HEADER = 5013;
/**
* The request contained an AVP with an invalid length. A Diameter message indicating this error MUST include the
* offending AVPs within a Failed-AVP AVP.
*/
int INVALID_AVP_LENGTH = 5014;
/**
* This error is returned when a request is received with an invalid message length.
*/
int INVALID_MESSAGE_LENGTH = 5015;
/**
* The request contained an AVP with which is not allowed to have the given value in the AVP Flags field. A
* Diameter message indicating this error MUST include the offending AVPs within a Failed-AVP AVP.
*/
int INVALID_AVP_BIT_COMBO = 5016;
/**
* This error is returned when a CER message is received, and there are no common security mechanisms supported
* between the peers. A Capabilities-Exchange-Answer (CEA) MUST be returned with the Result-Code AVP set to
* DIAMETER_NO_COMMON_SECURITY.
*/
int NO_COMMON_SECURITY = 5017;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/RouteException.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* The NoRouteException signals that no route exist for a given realm.
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public class RouteException extends Exception {
private static final long serialVersionUID = 1L;
/**
* Constructor with reason string
*
* @param message reason string
*/
public RouteException(String message) {
super(message);
}
/**
* Constructor with reason string and parent exception
*
* @param message message reason string
* @param cause parent exception
*/
public RouteException(String message, Throwable cause) {
super(message, cause);
}
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/Selector.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* @author erick.svenson@yahoo.com
*/
@SuppressWarnings("all") //3rd party lib
public interface Selector {
/**
* Return true if rule is true
*
* @param object check object
*
* @return true if rule is true
*/
boolean checkRule(T object);
/**
* Return metainformation object
*
* @return metainformation object
*/
A getMetaData();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/Session.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
/**
* This interface append to base interface specific methods for creating and send diameter requests and responses
*
* @author erick.svenson@yahoo.com
* @author artem.litvinov@gmail.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface Session extends BaseSession, Wrapper {
/**
* Set session request listener
*
* @param listener session request listener
*/
void setRequestListener(NetworkReqListener listener);
/**
* Returns a new Request object with the specified command code, applicationId, realm and predefined system avps.
*
* @param commandCode code of message
* @param appId applicationId of destination application
* @param destRealm name of destination Realm
*
* @return new message object
*/
Request createRequest(int commandCode, ApplicationId appId, String destRealm);
/**
* Returns a new Request object with the specified command code, applicationId, realm, host and predefined system
* avps.
*
* @param commandCode code of message
* @param appId applicationId of destination application
* @param destRealm name of destination Realm
* @param destHost name of destination Host
*
* @return new Request object
*/
Request createRequest(int commandCode, ApplicationId appId, String destRealm, String destHost);
/**
* Returns a new Request object base on previous request.(header is copied)
*
* @param prevRequest previous request (header is copied)
*
* @return new Request object
*/
Request createRequest(Request prevRequest);
/**
* Sends and wait response message with default timeout
*
* @param message request/answer diameter message
* @param listener event listener
*
* @throws org.jdiameter.api.InternalException The InternalException signals that internal error is
* occurred.
* @throws org.jdiameter.api.IllegalDiameterStateException The IllegalStateException signals that session has
* incorrect state (invalid).
* @throws org.jdiameter.api.RouteException The NoRouteException signals that no route exist for a
* given realm.
* @throws org.jdiameter.api.OverloadException The OverloadException signals that destination host is
* overloaded.
*/
void send(Message message, EventListener listener)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Sends and wait response message with defined timeout
*
* @param message request/answer diameter message
* @param listener event listener
* @param timeOut value of timeout
* @param timeUnit type of timeOut value
*
* @throws org.jdiameter.api.InternalException The InternalException signals that internal error is
* occurred.
* @throws org.jdiameter.api.IllegalDiameterStateException The IllegalStateException signals that session has
* incorrect state (invalid).
* @throws org.jdiameter.api.RouteException The NoRouteException signals that no route exist for a
* given realm.
* @throws org.jdiameter.api.OverloadException The OverloadException signals that destination host is
* overloaded.
*/
void send(Message message, EventListener listener, long timeOut, TimeUnit timeUnit)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Sends and wait response message with default timeout
*
* @param message request/answer diameter message
*
* @return InFuture result of an asynchronous operation
*
* @throws org.jdiameter.api.InternalException The InternalException signals that internal error is
* occurred.
* @throws org.jdiameter.api.IllegalDiameterStateException The IllegalStateException signals that session has
* incorrect state (invalid).
* @throws org.jdiameter.api.RouteException The NoRouteException signals that no route exist for a
* given realm.
* @throws org.jdiameter.api.OverloadException The OverloadException signals that destination host is
* overloaded.
*/
Future send(Message message)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Sends and wait response message with defined timeout
*
* @param message request/answer diameter message
* @param timeOut value of timeout
* @param timeUnit type of timeOut value
*
* @return InFuture result of an asynchronous operation
*
* @throws org.jdiameter.api.InternalException The InternalException signals that internal error is
* occurred.
* @throws org.jdiameter.api.IllegalDiameterStateException The IllegalStateException signals that session has
* incorrect state (invalid).
* @throws org.jdiameter.api.RouteException The NoRouteException signals that no route exist for a
* given realm.
* @throws org.jdiameter.api.OverloadException The OverloadException signals that destination host is
* overloaded.
*/
Future send(Message message, long timeOut, TimeUnit timeUnit)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/SessionFactory.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
import org.jdiameter.api.app.AppSession;
/**
* This class created session instance (Factory)
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface SessionFactory {
/**
* Generates new session id which can be used as argument in {@link #getNewSession(String)} or {@link
* #getNewAppSession(String, ApplicationId, Class)}.
*
* @return new id for session.
*
* @since 1.5.4.1-build416
*/
String getSessionId();
/**
* See {@link #getSessionId()}. This method has similar semantics, it adds custom part to id.
*
* @param customPart
*
* @return
*
* @since 1.5.4.1-build416
*/
String getSessionId(String customPart);
/**
* Create new raw session instance
*
* @return session instance of session
*
* @throws InternalException if a error occurs
*/
RawSession getNewRawSession() throws InternalException;
/**
* Create new session with new session id
*
* @return session instance of session
*
* @throws InternalException if a error occurs
*/
Session getNewSession() throws InternalException;
/**
* Create new session with predefined sessionId You can create special sessions to work on distributed systems
*
* @param sessionId instance of session
*
* @return session instance of session
*
* @throws InternalException if a error occurs
*/
Session getNewSession(String sessionId) throws InternalException;
/**
* Create new vendor specific application session Use this method for create specific application sessions Example:
* ClientShSession session = factory.getNewSession(appId, ClientShSession.class)
*
* @param applicationId predefined application id
* @param userSession A Class defining an interface that the result must implement.
*
* @return session instance
*
* @throws InternalException if a error occurs
*/
T getNewAppSession(ApplicationId applicationId, Class extends AppSession> userSession)
throws InternalException;
/**
* Create new vendor specific application session with predefined sessionId, origination host/realm names. You can
* create special sessions to work on distributed systems Use this method for create specific application sessions
* Example: ClientShSession session = factory.getNewSession(appId, ClientShSession.class)
*
* @param sessionId instance of session
* @param applicationId predefined application id
* @param userSession A Class defining an interface that the result must implement.
*
* @return session instance
*
* @throws InternalException if a error occurs
*/
T getNewAppSession(String sessionId, ApplicationId applicationId,
Class extends AppSession> userSession) throws InternalException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/Stack.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;
import org.jdiameter.api.validation.Dictionary;
/**
* The interface that every stack class must implement. The Java Diameter framework allows for multiple database stacks.
* Each stack should supply a class that implements the Stack interface. The StackManager will try to load as many
* stacks. It is strongly recommended that each Stack class should be small and standalone. When a Stack class is
* loaded, it should create an instance of itself and register it with the StackManager. This means that a user can load
* and register a stack by calling Class.forName("org.jdiameter.impl.Stack")
*
* Wrapper interface allows adapt message to any driver vendor specific interface
*
* Life cycle state machine for stack
*
*
*
*
* Stack must supported following wrapper classes: - Client API : PeerManager - Server API : PeerManager,
* OverloadManager (Network, PeerManagerWrapper is optional)
*
* @author erick.svenson@yahoo.com
* @author artem.litvinov@gmail.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface Stack extends Wrapper {
/**
* Configuration stack and allocation system resources.
*
* @param config Object with configuration parameters
*
* @return instance of session factory (DataSource equals)
*
* @throws IllegalDiameterStateException if a stack already configured or destroyed
* @throws InternalException if a stack can not processing initial procedure
*/
SessionFactory init(Configuration config) throws IllegalDiameterStateException, InternalException;
/**
* Start activity of stack (Thread and Network connections), not waiting switch ANY peer to OKEY state
*
* @throws IllegalDiameterStateException if a stack is not configured or stopped
* @throws InternalException if a stack can not processing start procedure
*/
void start() throws IllegalDiameterStateException, InternalException;
/**
* Start activity of stack (Thread and Network connections), waiting specified wait time switch peers to OKEY
* state.
*
* @param mode specified type of wait procedure
* @param timeout how long to wait before giving up, in units of unit
* @param unit a TimeUnit determining how to interpret the timeout parameter
*
* @throws IllegalDiameterStateException if a stack is not configured or stopped
* @throws InternalException if a stack can not processing start procedure
*/
void start(Mode mode, long timeout, TimeUnit unit) throws IllegalDiameterStateException, InternalException;
/**
* Stop any activity of stack (Thread and Network connections), waiting if necessary up to the specified wait time
* switch peers to DOWN state.
*
* @param timeout how long to wait before giving up, in units of unit
* @param unit a TimeUnit determining how to interpret the timeout parameter
* @param disconnectCause the disconnect-cause to be used in the DPR message(s)
*
* @throws IllegalDiameterStateException if a stack is not started
* @throws InternalException if a stack can not processing start procedure
*/
void stop(long timeout, TimeUnit unit, int disconnectCause) throws IllegalDiameterStateException, InternalException;
/**
* Destroy any resource append to this instance of stack
*/
void destroy();
/**
* @return true is stack is running.
*/
boolean isActive();
/**
* Return logger instance. You can set your logger handler and processing logger alarms in application.
*
* @return logger interface
*/
Logger getLogger();
/**
* Return SessionFactory instance
*
* @return SessionFactory instance
*
* @throws IllegalDiameterStateException if stack is not configured
*/
SessionFactory getSessionFactory() throws IllegalDiameterStateException;
/**
* Return Dictionary instance
*
* @return Dictionary instance
*
* @throws IllegalDiameterStateException if stack is not configured
*/
Dictionary getDictionary() throws IllegalDiameterStateException;
/**
* @return stack meta information
*/
MetaData getMetaData();
/**
* Return an existing session, if present
*
* @param sessionId the session identifier
* @param clazz the class of the session object
*
* @return the session object if it exists, null otherwise
*
* @throws InternalException if stack is not configured
*/
T getSession(String sessionId, Class clazz) throws InternalException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/StackManager.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
import java.io.PrintWriter;
import java.security.PrivilegedAction;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
/**
*
* The basic service for managing a set of Diameter stacks.
*
*
* As part of its initialization, the DriverManager class will
* attempt to load the stacks classes referenced in the "diameter.drivers" system property. This allows a user to
* customize the Diameter Drivers used by their applications. For example in your ~/.hotjava/properties file you might
* specify:
*
*
* A program can also explicitly load Diameter stacks at any time. For example, the my.diameter.Stack is loaded with the
* following statement:
*
*
* Class.forName("my.diameter.Stack");
*
*
*
* When the method getSession is called,
* the StackManager will attempt to locate a suitable stack from amongst those loaded at initialization and
* those loaded explicitly using the same classloader as the current applet or application.
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public final class StackManager {
private static final Object logSync = new Object();
private static List stacks = new CopyOnWriteArrayList();
private static PrintWriter logWriter = null;
private static boolean initialized = false;
static void initialize() {
if (initialized) {
return;
}
initialized = true;
loadInitialStacks();
println("Diameter StackManager initialized");
}
private StackManager() {
}
/**
* Retrieves the log writer.
*
* The getLogWriter and setLogWriter methods should be used instead of the
* get/setlogStream methods, which are deprecated.
*
* @return a java.io.PrintWriter object
*
* @see #setLogWriter
*/
public static PrintWriter getLogWriter() {
synchronized (logSync) {
return logWriter;
}
}
/**
* Sets the logging/tracing PrintWriter object that is used by the StackManager and all
* drivers.
*
* There is a minor versioning problem created by the introduction of the method setLogWriter. The
* method setLogWriter cannot create a PrintStream object that will be returned by
* getLogStream
*
* @param out the new logging/tracing PrintStream object;
* null to disable logging and tracing
*
* @throws SecurityException if a security manager exists and its
* checkPermission method denies
* setting the log writer
*/
public static void setLogWriter(java.io.PrintWriter out) {
synchronized (logSync) {
logWriter = out;
}
}
/**
* Attempts to locate a stack. The StackManager attempts to select an appropriate stack from the set of
* registered Diameter stacks.
*
* @param className class name of stack
*
* @return stack instance
*
* @throws InternalException if a manager has internal error
*/
public static synchronized Stack getStack(String className) throws InternalException {
println(new StringBuilder().append("StackManager.getStack(\"").append(className).append("\")").toString());
if (!initialized) {
initialize();
}
// Gets the classloader of the code that called this method, may be null.
ClassLoader callerCL = ClassLoader.getSystemClassLoader();
// Walk through the loaded stacks attempting to locate someone who understands the given URL.
for (StackInfo di : stacks) {
// If the caller does not have permission to load the stack then skip it.
if (getCallerClass(callerCL, di.stackClassName) != di.stackClass) {
println(new StringBuilder().append(" skipping: ").append(di).toString());
continue;
}
println(new StringBuilder().append(" trying ").append(di).toString());
if (di.stackClassName.equals(className)) {
// Success!
println("geStack returning " + di);
return (di.stack);
}
}
println("getStack: no suitable stack");
throw new InternalException("No suitable stack");
}
/**
* Registers the given stack with the ScoketManager. A newly-loaded stack class should call the method
* registerStack to make itself known to the StackManager.
*
* @param stack the new Diameter Stack that is to be registered with the
* StackManager
*
* @throws InternalException if a manager has internal error
*/
public static synchronized void registerStack(Stack stack) throws InternalException {
if (!initialized) {
initialize();
}
StackInfo stackInfo = new StackInfo();
stackInfo.stack = stack;
stackInfo.stackClass = stack.getClass();
stackInfo.stackClassName = stackInfo.stackClass.getName();
stacks.add(stackInfo);
println(new StringBuilder().append("registerStack: ").append(stackInfo).toString());
}
/**
* Drops a driver from the DiameterManager's list. Applets can only deregister stacks from their own
* classloaders.
*
* @param stack the Diameter stack to drop
*
* @throws InternalException if a manager has internal error
*/
public static synchronized void deregisterStack(Stack stack) throws InternalException {
// Gets the classloader of the code that called this method, may be null.
ClassLoader callerCL = ClassLoader.getSystemClassLoader();
println(new StringBuilder().append("StackManager.deregisterStack: ").append(stack).toString());
// Walk through the loaded stacks.
int i;
StackInfo stackInfo = null;
for (i = 0; i < stacks.size(); i++) {
stackInfo = stacks.get(i);
if (stackInfo.stack == stack) {
break;
}
}
// If we can't find the stack just return.
if (i >= stacks.size()) {
println(" couldn't find stack to unload");
return;
}
// If the caller does not have permission to load the stack then throw a security exception.
if (stackInfo == null || getCallerClass(callerCL, stackInfo.stackClassName) != stackInfo.stackClass) {
throw new SecurityException();
}
// Remove the stack. Other entries in stacks get shuffled down.
stacks.remove(i);
}
/**
* Retrieves an Enumeration with all of the currently loaded Diameter stacks to which the current caller has
* access.
*
*
* Note: The classname of a stack can be found using
* d.getClass().getName()
*
* @return the list of Diameter stacks loaded by the caller's class loader
*/
public static synchronized Enumeration getStacks() {
List result = new CopyOnWriteArrayList();
if (!initialized) {
initialize();
}
// Gets the classloader of the code that called this method, may be null.
ClassLoader callerCL = ClassLoader.getSystemClassLoader();
// Walk through the loaded stacks.
for (StackInfo di : stacks) {
// If the caller does not have permission to load the stack then skip it.
if (getCallerClass(callerCL, di.stackClassName) != di.stackClass) {
println(new StringBuilder().append(" skipping: ").append(di).toString());
continue;
}
result.add(di.stack);
}
return Collections.enumeration(result);
}
public static void println(String message) {
synchronized (logSync) {
if (logWriter != null) {
logWriter.println(message);
// automatic flushing is never enabled, so we must do it ourselves
logWriter.flush();
}
}
}
@SuppressWarnings("all") //3rd party lib
private static Class getCallerClass(ClassLoader callerClassLoader, String stackClassName) {
Class callerC;
try {
callerC = Class.forName(stackClassName, true, callerClassLoader);
} catch (Exception ex) {
callerC = null;
}
return callerC;
}
private static void loadInitialStacks() {
String stacks;
try {
stacks = System.getProperty("diameter.stacks");
} catch (Exception ex) {
stacks = null;
}
println(new StringBuilder().append("StackManager.initialize: diameter.stacks = ").append(stacks).toString());
if (stacks == null) {
return;
}
while (stacks.length() != 0) {
int x = stacks.indexOf(':');
String stack;
if (x < 0) {
stack = stacks;
stacks = "";
} else {
stack = stacks.substring(0, x);
stacks = stacks.substring(x + 1);
}
if (stack.length() == 0) {
continue;
}
try {
println(new StringBuilder().append("StackManager.Initialize: loading ").append(stack).toString());
Class.forName(stack, true, ClassLoader.getSystemClassLoader());
} catch (Exception ex) {
println(new StringBuilder().append("StackManager.Initialize: load failed: ").append(ex).toString());
}
}
}
}
class GetPropertyAction implements PrivilegedAction {
private String theProp;
private String defaultVal;
GetPropertyAction(String s) {
theProp = s;
}
GetPropertyAction(String s, String s1) {
theProp = s;
defaultVal = s1;
}
@Override
public String run() {
String s = System.getProperty(theProp);
return s != null ? s : defaultVal;
}
}
@SuppressWarnings("all") //3rd party lib
class StackInfo {
Stack stack;
Class stackClass;
String stackClassName;
@Override
public String toString() {
return (new StringBuilder().append("stack[className=").append(stackClassName).append(",").append(stack).append("]")
.toString());
}
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/StackType.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* This enumerated class define type of jDiameter stacks
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
public enum StackType {
TYPE_CLIENT,
TYPE_SERVER
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/Statistic.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* This class is container for statistics information. For example: Count Request/Answer messages
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface Statistic {
/**
* Return name of statistic
*
* @return name of statistic
*/
String getName();
/**
* Return description of statistic
*
* @return description of statistic
*/
String getDescription();
/**
* Enable/Disable collecting statistics
*
* @param value true for enable statistic
*/
void enable(boolean value);
/**
* Return true is statistic is collecting
*
* @return true is statistic is collecting
*/
boolean isEnabled();
/**
* Reset all counter in statistic
*/
void reset();
/**
* Return counters of statistics
*
* @return counters of statistics
*/
StatisticRecord[] getRecords();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/StatisticRecord.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* This class implements counter of statistic
*
* @author erick.svenson@yahoo.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface StatisticRecord {
/**
* Return name of counter
*
* @return name of counter
*/
String getName();
/**
* Return description of counter
*
* @return description of counter
*/
String getDescription();
/**
* Return value of counter as integer
*
* @return value of counter
*/
int getValueAsInt();
/**
* Return value of counter as double
*
* @return value of counter
*/
double getValueAsDouble();
/**
* Return value of counter as long
*
* @return value of counter
*/
long getValueAsLong();
/**
* Return child counters
*
* @return array of child counters
*/
StatisticRecord[] getChilds();
/**
* Reset counter and all child counters
*/
void reset();
/**
* Enable/Disable counter
*
* @param e on/off parameter
*/
void enable(boolean e);
boolean isEnabled();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/URI.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
import java.io.Serializable;
import java.net.URISyntaxException;
import java.net.UnknownServiceException;
/**
* This class handles Diameter URIs. It only implements parts that are needed for the Diameter URI
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @author Yulian Oifa
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public final class URI implements Comparable, Serializable {
private static final long serialVersionUID = 1L;
private static final String FIELD_PROTOCOL = "protocol=";
private static final String FIELD_TRANSPORT = "transport=";
private static final String SCHEME_SEPARATOR = "://";
private static final String PARAMS_SEPARATOR = ";";
private static final String DEFAULT_SCHEME = "aaa";
private static final int DEFAULT_PORT = 3868;
private String scheme;
private String host;
private int port = -1;
private String path = "";
/**
* Constructor with string parameter
*
* @param uri String representation of URI
*
* @throws URISyntaxException which signals that URI has syntax error
* @throws UnknownServiceException which signals that URI has incorrect scheme
*/
public URI(String uri) throws URISyntaxException, UnknownServiceException {
parse(uri);
if (getFQDN() == null || getFQDN().trim().length() == 0) {
throw new URISyntaxException(uri, "Host not found");
}
if (!getScheme().equals("aaa") && !getScheme().equals("aaas")) {
throw new UnknownServiceException(
new StringBuilder().append("Unsupported service: ").append(getScheme()).toString());
}
}
/**
* @return scheme for URI
*/
public String getScheme() {
return scheme;
}
/**
* @return host name of URI
*/
public String getFQDN() {
return host;
}
/**
* Returns the port number of this URI, or -1 if this is not set.
*
* @return the port number of this URI
*/
public int getPort() {
return port == -1 ? DEFAULT_PORT : port;
}
/**
* @return true if this URI is secure
*/
public boolean isSecure() {
return getScheme().endsWith("s");
}
/**
* @return path of this URI
*/
public String getPath() {
return path;
}
/**
* @return protocol parameter of this URI
*/
public String getProtocolParam() {
String[] args = getPath().split(PARAMS_SEPARATOR);
for (String arg : args) {
if (arg.startsWith(FIELD_PROTOCOL)) {
return arg.substring(FIELD_PROTOCOL.length());
}
}
return null;
}
/**
* @return transport parameter of this URI
*/
public String getTransportParam() {
String[] args = getPath().split(PARAMS_SEPARATOR);
for (String arg : args) {
if (arg.startsWith(FIELD_TRANSPORT)) {
return arg.substring(FIELD_TRANSPORT.length());
}
}
return null;
}
/**
* @return String representation of this URI in RFC 3588 format
*/
@Override
public String toString() {
StringBuffer rc = new StringBuffer(scheme).append(SCHEME_SEPARATOR).append(host);
if (port != -1) {
rc.append(":").append(port);
}
if (path != null && path.length() > 0) {
rc.append(PARAMS_SEPARATOR).append(path);
}
return rc.toString();
}
private void parse(String uri) throws URISyntaxException {
try {
int schemeStartIndex = uri.indexOf(SCHEME_SEPARATOR);
int schemeEndIndex = 0;
if (schemeStartIndex == -1) {
scheme = DEFAULT_SCHEME;
} else {
scheme = uri.substring(0, schemeStartIndex);
schemeEndIndex = schemeStartIndex + 3;
schemeStartIndex = uri.indexOf(';', schemeEndIndex);
}
if (schemeStartIndex == -1) {
host = uri.substring(schemeEndIndex);
} else {
host = uri.substring(schemeEndIndex, schemeStartIndex);
}
int sepIndex = host.indexOf(':');
if (sepIndex != -1) {
port = Integer.parseInt(host.substring(sepIndex + 1));
host = host.substring(0, sepIndex);
}
if (schemeStartIndex != -1) {
path = uri.substring(schemeStartIndex + 1);
}
} catch (Exception e) {
throw new URISyntaxException(uri, "URI has incorrect format");
}
}
/**
* Indicates whether some other object is "equal to" this one.
*
* The equals method implements an equivalence relation on non-null object references:
*
*
It is reflexive: for any non-null reference value
* x, x.equals(x) should return
* true.
*
It is symmetric: for any non-null reference values
* x and y, x.equals(y)
* should return true if and only if
* y.equals(x) returns true.
*
It is transitive: for any non-null reference values
* x, y, and z, if
* x.equals(y) returns true and
* y.equals(z) returns true, then
* x.equals(z) should return true.
*
It is consistent: for any non-null reference values
* x and y, multiple invocations of
* x.equals(y) consistently return true
* or consistently return false, provided no
* information used in equals comparisons on the
* objects is modified.
*
For any non-null reference value x,
* x.equals(null) should return false.
*
*
* The equals method for class Object implements
* the most discriminating possible equivalence relation on objects;
* that is, for any non-null reference values x and
* y, this method returns true if and only
* if x and y refer to the same object
* (x == y has the value true).
*
* Note that it is generally necessary to override the hashCode
* method whenever this method is overridden, so as to maintain the
* general contract for the hashCode method, which states
* that equal objects must have equal hash codes.
*
* @param obj the reference object with which to compare.
*
* @return true if this object is the same as the obj
* argument; false otherwise.
*
* @see #hashCode()
* @see java.util.Hashtable
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
URI that = (URI) obj;
return getPort() == that.getPort() && !(host != null ? !host.equals(that.host) : that.host != null) &&
!(path != null ? !path.equals(that.path) : that.path != null) &&
!(scheme != null ? !scheme.equals(that.scheme) : that.scheme != null);
}
/**
* Returns a hash code value for the object. This method is supported for the benefit of hashtables such as those
* provided by
* java.util.Hashtable.
*
* The general contract of hashCode is:
*
*
Whenever it is invoked on the same object more than once during
* an execution of a Java application, the hashCode method
* must consistently return the same integer, provided no information
* used in equals comparisons on the object is modified.
* This integer need not remain consistent from one execution of an
* application to another execution of the same application.
*
If two objects are equal according to the equals(Object)
* method, then calling the hashCode method on each of
* the two objects must produce the same integer result.
*
It is not required that if two objects are unequal
* according to the {@link java.lang.Object#equals(java.lang.Object)}
* method, then calling the hashCode method on each of the
* two objects must produce distinct integer results. However, the
* programmer should be aware that producing distinct integer results
* for unequal objects may improve the performance of hashtables.
*
*
* As much as is reasonably practical, the hashCode method defined by
* class Object does return distinct integers for distinct
* objects. (This is typically implemented by converting the internal
* address of the object into an integer, but this implementation
* technique is not required by the
* JavaTM programming language.)
*
* @return a hash code value for this object.
*
* @see java.lang.Object#equals(java.lang.Object)
* @see java.util.Hashtable
*/
@Override
public int hashCode() {
int result;
result = (scheme != null ? scheme.hashCode() : 0);
result = 31 * result + (host != null ? host.hashCode() : 0);
result = 31 * result + getPort();
result = 31 * result + (path != null ? path.hashCode() : 0);
return result;
}
/**
* Compares this object with the specified object for order. Returns a negative integer, zero, or a positive
* integer as this object is less than, equal to, or greater than the specified object.
*
*
* In the foregoing description, the notation
* sgn(expression) designates the mathematical
* signum function, which is defined to return one of -1,
* 0, or 1 according to whether the value of expression
* is negative, zero or positive.
*
* The implementor must ensure sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) for all x and
* y. (This implies that x.compareTo(y) must throw an exception iff
* y.compareTo(x) throws an exception.)
*
*
* The implementor must also ensure that the relation is transitive:
* (x.compareTo(y)>0 && y.compareTo(z)>0) implies
* x.compareTo(z)>0.
*
*
* Finally, the implementer must ensure that x.compareTo(y)==0 implies that sgn(x.compareTo(z)) ==
* sgn(y.compareTo(z)), for all z.
*
*
* It is strongly recommended, but not strictly required that
* (x.compareTo(y)==0) == (x.equals(y)). Generally speaking, any
* class that implements the Comparable interface and violates this condition should clearly indicate this
* fact. The recommended language is "Note: this class has a natural ordering that is inconsistent with equals."
*
* @param obj the Object to be compared.
*
* @return a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than
* the specified object.
*
* @throws ClassCastException if the specified object's type prevents it from being compared to this Object.
*/
@Override
public int compareTo(Object obj) {
if (obj instanceof URI) {
return this.toString().compareTo(obj.toString());
} else {
return -1;
}
}
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/Wrapper.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api;
/**
* Interface for JDiameter classes which provide the ability to retrieve the delegate instance when the instance in
* question is in fact a proxy class. The wrapper pattern is employed by many JDiameter stack implementations to provide
* extensions beyond the traditional JDiameter API that are specific to a data source. Developers may wish to gain
* access to these resources that are wrapped ( the delegates) as proxy class instances representing the the actual
* resources. This interface describes a standard mechanism to access these wrapped resources represented by their
* proxy, to permit direct access to the resource delegates.
*
* @author erick.svenson@yahoo.com
* @author artem.litvinov@gmail.com
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface Wrapper {
/**
* Returns true if this either implements the interface argument or is directly or indirectly a wrapper for an
* object that does. Returns false otherwise. If this implements the interface then return true, else if t his is a
* wrapper then return the result of recursively calling isWrapperFor on the wrapped object. If this does not
* implement the interface and is not a wrapper, return false. This method should be implemented as a low-cost
* operation compared to unwrap so that callers can use this method to avoid expensive unwrap calls that may fail.
* If this method returns true then calling unwrap with the same argument should succeed.
*
* @param iface A Class defining an interface that the result must implement.
*
* @return true if this implements the interface or directly or indirectly wraps an object that does.
*
* @throws InternalException If no object found that implements the interface
*/
boolean isWrapperFor(java.lang.Class> iface) throws InternalException;
/**
* Returns an object that implements the given interface to allow access to non-standard methods, or standard
* methods not exposed by the proxy. The result may be either the object found to implement the interface or a proxy
* for that object. If the receiver implements the interface then that is the object. If the receiver is a wrapper
* and the wrapped object implements the interface then that is the object. Otherwise the object is the result of
* calling unwrap recursively on the wrapped object. If the receiver is not a wrapper and does not implement the
* interface, then an SQLException is thrown.
*
* @param iface A Class defining an interface that the result must implement.
*
* @return an object that implements the interface. May be a proxy for the actual implementing object.
*
* @throws InternalException If no object found that implements the interface
*/
T unwrap(java.lang.Class iface) throws InternalException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/acc/ClientAccSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.acc;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.acc.events.AccountRequest;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
/**
* Basic class for accounting application specific session Listener must injection from constructor of implementation
* class
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientAccSession extends AppSession, StateMachine {
/**
* Send Account Request to Server
*
* @param request request object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalStateException The IllegalStateException signals that session has incorrect state (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendAccountRequest(AccountRequest request)
throws InternalException, IllegalStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/acc/ClientAccSessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.acc;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.acc.events.AccountAnswer;
import org.jdiameter.api.acc.events.AccountRequest;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
/**
* This interface defines the possible actions that the different states in the Accounting state machine
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientAccSessionListener {
/**
* Notifies this AccSessionEventListener that the ClientAccSesssion has recived AccAnswer message.
*
* @param appSession parent application session (FSM)
* @param request accounting request object
* @param answer accounting answer object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doAccAnswerEvent(ClientAccSession appSession, AccountRequest request, AccountAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this AccSessionEventListener that the ClientAccSesssion has recived not account message.
*
* @param appSession parent application session (FSM)
* @param request request object
* @param answer answer object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doOtherEvent(AppSession appSession, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/acc/ServerAccSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.acc;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.acc.events.AccountAnswer;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
/**
* Basic class for server accounting application specific session. Listener must injection from constructor of
* implementation class.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerAccSession extends AppSession, StateMachine {
/**
* Send Account Answer to Client
*
* @param answer request object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalStateException The IllegalStateException signals that session has incorrect state (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendAccountAnswer(AccountAnswer answer)
throws InternalException, IllegalStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/acc/ServerAccSessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.acc;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.acc.events.AccountRequest;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
/**
* This interface defines the possible actions that the different states in the Accounting state machine
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerAccSessionListener {
/**
* Notifies this AccSessionEventListener that the ServerAccSesssion has recived AccRequest message.
*
* @param appSession parent application session (FSM)
* @param request accounting request object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doAccRequestEvent(ServerAccSession appSession, AccountRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this AuthSessionEventListener that the ServerAuthSesssion has recived not authentication message.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/acc/events/AccountAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.acc.events;
import org.jdiameter.api.AvpDataException;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* An Answer message is sent by a recipient of Request once it has received and interpreted the Request.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface AccountAnswer extends AppAnswerEvent {
String _SHORT_NAME = "ACA";
String _LONG_NAME = "Accounting-Answer";
int code = 271;
/**
* @return Record type of answer
*
* @throws org.jdiameter.api.AvpDataException if result code avp is not integer
*/
int getAccountingRecordType() throws AvpDataException;
/**
* @return record number
*
* @throws AvpDataException if result code avp is not integer
*/
long getAccountingRecordNumber() throws AvpDataException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/acc/events/AccountRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.acc.events;
import org.jdiameter.api.AvpDataException;
import org.jdiameter.api.app.AppRequestEvent;
/**
* An Account Request is a request from a client to a server
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface AccountRequest extends AppRequestEvent {
String _SHORT_NAME = "ACR";
String _LONG_NAME = "Accounting-Request";
int code = 271;
/**
* @return Record type of request
*
* @throws AvpDataException if result code avp is not integer
*/
int getAccountingRecordType() throws AvpDataException;
/**
* @return record number
*
* @throws AvpDataException if result code avp is not integer
*/
long getAccountingRecordNumber() throws AvpDataException;
/**
* @param recordType
*
* @throws AvpDataException
*/
void setAccountingRecordType(int recordType) throws AvpDataException;
/**
* @param number
*
* @throws AvpDataException
*/
void setAccountingRecordNumber(long number) throws AvpDataException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/annotation/AvpDscr.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* This annotation allows describe Java POJO object as Diameter avp element
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface AvpDscr {
/**
* Return avp code
*
* @return avp code
*/
int code();
/**
* Return avp name
*
* @return avp name
*/
String name() default "unknown";
/**
* Return avp type
*
* @return avp type
*/
AvpType type();
/**
* Return avp vendor id
*
* @return avp vendor id
*/
long vendorId() default 0;
/**
* Return array of mandatory flags
*
* @return array of mandatory flags
*/
AvpFlag[] must() default {};
/**
* Return array optional flags
*
* @return array optional flags
*/
AvpFlag[] may() default {};
/**
* Return array flags which should not be set
*
* @return array flags which should not be set
*/
AvpFlag[] shldNot() default {};
/**
* Return array flags which must not be set
*
* @return array flags which must not be set
*/
AvpFlag[] mustNot() default {};
/**
* Return true if the flag can be encrypted
*
* @return true if the flag can be encrypted
*/
boolean mayEncr() default false;
/**
* Return array of avp child ( for grouped avp )
*
* @return array of avp child
*/
Child[] childs() default {};
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/annotation/AvpFlag.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.annotation;
/**
* This enumerated class describe all flags of avp header
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
public enum AvpFlag {
/**
* Mandatory flag
*/
M,
/**
* Vendor-Id flag
*/
V,
/**
* Encryption flag
*/
P
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/annotation/AvpType.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.annotation;
/**
* This enumerated class describe base type of avp. For more information look RFC 3588
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public enum AvpType {
OctetString,
Integer32,
Integer64,
Unsigned32,
Unsigned64,
Float32,
Float64,
Grouped,
Address,
Time,
UTF8String,
DiameterIdentity,
DiameterURI,
Enumerated,
IPFilterRule,
QoSFilterRule
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/annotation/Child.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* This annotation allow describe information about child of command / group avp
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Child {
/**
* Return reference to child class or interface with AvpDscr annotation
*
* @return reference to child class or interface with AvpDscr annotation
*/
Class> ref();
/**
* Return child position
*
* @return child position
*/
int pos() default -1;
/**
* Return minimum count of this child in parent avp set
*
* @return minimum count of this child in parent avp set
*/
int min() default 0;
/**
* Return maximum count of this child in parent avp set
*
* @return maximum count of this child in parent avp set s
*/
int max() default 1;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/annotation/CommandDscr.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* This annotation allows describe Java POJO object as Diameter Command element
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface CommandDscr {
/**
* Return command code
*
* @return command code
*/
int code();
/**
* Return command name
*
* @return command name
*/
String name() default "unknown";
/**
* Return array of command flags
*
* @return array of command flags
*/
CommandFlag[] flags() default {};
/**
* Return command application-id
*
* @return command application-id
*/
long appId() default 0;
/**
* Return array of command child avp
*
* @return array of command child avp
*/
Child[] childs() default {};
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/annotation/CommandFlag.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.annotation;
/**
* This enumerated class describe all flags of message
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
public enum CommandFlag {
/**
* Request flag
*/
R,
/**
* Proxiable flag
*/
P,
/**
* Error flag
*/
E,
/**
* Re-transmitted flag
*/
T,
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/annotation/Getter.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* This annotation allows get child object from command / group avp and get value for simple avp
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.CONSTRUCTOR, ElementType.METHOD })
public @interface Getter {
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/annotation/Setter.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* This annotation allows set child object to command / group avp and set value to simple avp
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.CONSTRUCTOR, ElementType.METHOD })
public @interface Setter {
/**
* This enumeration defines for what Avp (known/not known) is used setter
*/
enum Type {
/**
* For known avp
*/
DEFINED,
/**
* For unknown avp
*/
UNDEFINED
}
/**
* Return type of setter
*
* @return type of setter
*/
Type value() default Type.DEFINED;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/app/AppAnswerEvent.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.app;
import org.jdiameter.api.Avp;
import org.jdiameter.api.AvpDataException;
/**
* Basic class for application specific answer event (Sx, Rx, Gx)
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface AppAnswerEvent extends AppEvent {
/**
* Return result code (or experimental if present) AVP of answer message
*
* @return result code (or experimental if present) AVP of answer message
*
* @throws AvpDataException if result code avp absent
*/
Avp getResultCodeAvp() throws AvpDataException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/app/AppEvent.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.app;
import java.io.Serializable;
import org.jdiameter.api.AvpDataException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.Message;
/**
* Basic class for application specific event (Sx, Rx, Gx)
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface AppEvent extends Serializable {
/**
* @return commCode of parent message
*/
int getCommandCode();
/**
* @return set of associated message
*
* @throws InternalException signals that internal message is not set.
*/
Message getMessage() throws InternalException;
/**
* Return origination host avp value ( null if avp is empty )
*
* @return origination host avp value
*
* @throws AvpDataException if avp is not string
*/
String getOriginHost() throws AvpDataException;
/**
* Return origination realm avp value ( null if avp is empty )
*
* @return origination realm avp value
*
* @throws AvpDataException if avp is not string
*/
String getOriginRealm() throws AvpDataException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/app/AppRequestEvent.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.app;
import org.jdiameter.api.AvpDataException;
/**
* Basic class for application specific request event (Sx, Rx, Gx)
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface AppRequestEvent extends AppEvent {
/**
* Return destination host avp value ( null if avp is empty )
*
* @return destination host avp value
*
* @throws AvpDataException if avp is not string
*/
String getDestinationHost() throws AvpDataException;
/**
* Return destination realm avp value ( null if avp is empty )
*
* @return origination realm avp value
*
* @throws AvpDataException if avp is not string
*/
String getDestinationRealm() throws AvpDataException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/app/AppSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.app;
import java.util.List;
import org.jdiameter.api.ApplicationId;
import org.jdiameter.api.BaseSession;
import org.jdiameter.api.Session;
/**
* Basic class for application specific session (Sx, Rx, Gx)
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface AppSession extends BaseSession {
/**
* Return true if session has stateless FSM
*
* @return true if session has stateless FSM
*/
boolean isStateless();
/**
* Return current value of applicationId of application session.
*
* @return applicationId of application session.
*/
ApplicationId getSessionAppId();
/**
* Returns a list of child sessions
*
* @return List of child delivery sessions
*/
List getSessions();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/app/State.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.app;
/**
* This interface must be extended by any class that should implement a certain state in the state machine.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface State {
/**
* Action that should be taken each time this state is entered
*/
void entryAction();
/**
* Action that should be taken each time this state is exited
*/
void exitAction();
/**
* This method processed received event.
*
* @param event the event to process.
*
* @return true if event is processed
*/
boolean processEvent(StateEvent event);
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/app/StateChangeListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.app;
/**
* Interface used to inform about changes in the state for a FSM.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface StateChangeListener {
/**
* @param oldState Old state of FSM
* @param newState New state of FSM
*
* @deprecated A change of state has occurred for a FSM.
*/
@Deprecated
@SuppressWarnings("unchecked")
void stateChanged(Enum oldState, Enum newState);
/**
* A change of state has occurred for a FSM.
*
* @param source the App Session that generated the change.
* @param oldState Old state of FSM
* @param newState New state of FSM
*/
@SuppressWarnings("unchecked")
void stateChanged(T source, Enum oldState, Enum newState);
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/app/StateEvent.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.app;
/**
* The Event class holds information about the different events that can be handled by the state machine. Events are
* prioritized depending on the importance of the event. The priority model tries to ensure that old messages are
* handled before any new ones.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface StateEvent extends Comparable {
/**
* This method should be adapted by any subclass to return the type corresponding to the actual event.
*
* @return type of this StateEvent
*/
E encodeType(Class enumType);
/**
* Return type of this StateEvent
*
* @return type of this StateEvent
*/
Enum getType();
/**
* Returns a negative value if the priority for this object
* is higher than the priority for the supplied object.
*
* @param obj the Event to compare to.
* @return compare result
*/
/**
* Set information object to this StateEvent
*
* @param data information object
*/
void setData(Object data);
/**
* Return information object of this StateEvent
*
* @return information object of this StateEvent
*/
Object getData();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/app/StateMachine.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.app;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
/**
* The StateMachine lets you organize event handling, if the order of the events are important to you.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface StateMachine {
/**
* Add a new state change listener
*
* @param listener a reference to the listener that will get information about state changes.
*/
void addStateChangeNotification(StateChangeListener listener);
/**
* Remove a state change listener
*
* @param listener a reference to the listener that will get information about state changes.
*/
void removeStateChangeNotification(StateChangeListener listener);
/**
* Handle an event in the current state.
*
* @param event processing event
*
* @return true if staterocessed
*
* @throws OverloadException if queue of state mashine is full
* @throws InternalException if FSM has internal error
*/
boolean handleEvent(StateEvent event) throws InternalException, OverloadException;
/**
* Get the current state
*
* @param stateType type of state
*
* @return current state
*/
E getState(Class stateType);
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/auth/ClientAuthSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.auth;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.auth.events.AbortSessionAnswer;
import org.jdiameter.api.auth.events.ReAuthAnswer;
import org.jdiameter.api.auth.events.SessionTermRequest;
/**
* Basic class for authentication application specific session Listener must injection from constructor of
* implementation class
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientAuthSession extends AppSession, StateMachine {
/**
* Send authentication session request to server
*
* @param request Authentication-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendAuthRequest(AppRequestEvent request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send re-authentication session answer to server
*
* @param answer Re-Authentication-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendReAuthAnswer(ReAuthAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send abort session answer to server
*
* @param answer Abort-Session-Answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded
*/
void sendAbortSessionAnswer(AbortSessionAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send session termination request to server
*
* @param request Session-Term-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendSessionTerminationRequest(SessionTermRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/auth/ClientAuthSessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.auth;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.auth.events.AbortSessionRequest;
import org.jdiameter.api.auth.events.ReAuthRequest;
import org.jdiameter.api.auth.events.SessionTermAnswer;
/**
* This interface defines the possible actions that the different states in the Authentication state machine
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientAuthSessionListener {
/**
* Notifies this AuthSessionEventListener that the ClientAuthSesssion has recived AuthAnswer message.
*
* @param session parent application session (FSM)
* @param request authentication request object
* @param answer authentication answer object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doAuthAnswerEvent(ClientAuthSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this AuthSessionEventListener that the ClientAuthSesssion has recived ReAuthRequest message.
*
* @param session parent application session (FSM)
* @param request re-authentication request object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doReAuthRequestEvent(ClientAuthSession session, ReAuthRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this AuthSessionEventListener that the ClientAuthSesssion has recived AbortSessionRequest message.
*
* @param session parent application session (FSM)
* @param request abort session request object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doAbortSessionRequestEvent(ClientAuthSession session, AbortSessionRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this AuthSessionEventListener that the ClientAuthSesssion has recived SessionTerminationAnswer message.
*
* @param session parent application session (FSM)
* @param answer abort session request object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doSessionTerminationAnswerEvent(ClientAuthSession session, SessionTermAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this AuthSessionEventListener that the ClientAuthSesssion has recived not authentication message.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/auth/ServerAuthSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.auth;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.auth.events.AbortSessionRequest;
import org.jdiameter.api.auth.events.ReAuthRequest;
import org.jdiameter.api.auth.events.SessionTermAnswer;
/**
* Basic class for server authentication application specific session. Listener must injection from constructor of
* implementation class.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerAuthSession extends AppSession, StateMachine {
/**
* Send authenticate answer to client
*
* @param answer Authentication answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendAuthAnswer(AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send re-authenticate request to client
*
* @param request Re-Authentication request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendReAuthRequest(ReAuthRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send session abort session request to client
*
* @param request Abort-Session-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendAbortSessionRequest(AbortSessionRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send session termination answer to client
*
* @param request Session-Term-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendSessionTerminationAnswer(SessionTermAnswer request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/auth/ServerAuthSessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.auth;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.auth.events.AbortSessionAnswer;
import org.jdiameter.api.auth.events.ReAuthAnswer;
import org.jdiameter.api.auth.events.ReAuthRequest;
import org.jdiameter.api.auth.events.SessionTermRequest;
/**
* This interface defines the possible actions that the different states in the Authentication state machine
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerAuthSessionListener {
/**
* Notifies this AuthSessionEventListener that the ServerAuthSesssion has recived AuthRequest message.
*
* @param session parent application session (FSM)
* @param request authentication request object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doAuthRequestEvent(ServerAuthSession session, AppRequestEvent request)
throws InternalException, org.jdiameter.api.IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this AuthSessionEventListener that the ServerAuthSesssion has recived ReAuthAnswer message.
*
* @param session parent application session (FSM)
* @param request re-authentication request object
* @param answer re-authentication answer object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doReAuthAnswerEvent(ServerAuthSession session, ReAuthRequest request, ReAuthAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this AuthSessionEventListener that the ServerAuthSesssion has recived AbortSessionRequest message.
*
* @param session parent application session (FSM)
* @param answer abort session event event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doAbortSessionAnswerEvent(ServerAuthSession session, AbortSessionAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this AuthSessionEventListener that the ServerAuthSesssion has recived SessionTerminationRequest
* message.
*
* @param session parent application session (FSM)
* @param request session termination request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doSessionTerminationRequestEvent(ServerAuthSession session, SessionTermRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this AuthSessionEventListener that the ServerAuthSesssion has recived not authentication message.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/auth/events/AbortSessionAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.auth.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* A Answer message is sent by a recipient of Request once it has received and interpreted the Request.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface AbortSessionAnswer extends AppAnswerEvent {
String _SHORT_NAME = "ASA";
String _LONG_NAME = "Abort-Session-Answer";
int code = 274;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/auth/events/AbortSessionRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.auth.events;
import org.jdiameter.api.AvpDataException;
import org.jdiameter.api.app.AppRequestEvent;
/**
* A Abort Session Request is a request from a client to a server
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface AbortSessionRequest extends AppRequestEvent {
String _SHORT_NAME = "ASR";
String _LONG_NAME = "Abort-Session-Request";
int code = 274;
/**
* Return Auth-Application-Id value of request
*
* @return Auth-Application-Id value of request
*
* @throws org.jdiameter.api.AvpDataException if avp is not integer
*/
long getAuthApplicationId() throws AvpDataException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/auth/events/ReAuthAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.auth.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* A Answer message is sent by a recipient of Request once it has received and interpreted the Request.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface ReAuthAnswer extends AppAnswerEvent {
String _SHORT_NAME = "RAA";
String _LONG_NAME = "Re-Auth-Answer";
int code = 258;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/auth/events/ReAuthRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.auth.events;
import org.jdiameter.api.AvpDataException;
import org.jdiameter.api.app.AppRequestEvent;
/**
* A ReAuthentication Request is a request from a client to a server
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface ReAuthRequest extends AppRequestEvent {
String _SHORT_NAME = "RAR";
String _LONG_NAME = "Re-Auth-Request";
int code = 258;
/**
* Return re-authentication request type
*
* @return re-authentication request type
*
* @throws org.jdiameter.api.AvpDataException if avp is not integer
*/
int getReAuthRequestType() throws AvpDataException;
/**
* Return Auth-Application-Id value of request
*
* @return Auth-Application-Id value of request
*
* @throws AvpDataException if avp is not integer
*/
long getAuthApplicationId() throws AvpDataException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/auth/events/SessionTermAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.auth.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* A Answer message is sent by a recipient of Request once it has received and interpreted the Request.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface SessionTermAnswer extends AppAnswerEvent {
String _SHORT_NAME = "STA";
String _LONG_NAME = "Session-Termination-Answer";
int code = 275;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/auth/events/SessionTermRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.auth.events;
import org.jdiameter.api.AvpDataException;
import org.jdiameter.api.app.AppRequestEvent;
/**
* A Session Termination Request is a request from a client to a server
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.1 Final
*/
@SuppressWarnings("all") //3rd party lib
public interface SessionTermRequest extends AppRequestEvent {
String _SHORT_NAME = "STR";
String _LONG_NAME = "Session-Termination-Request";
int code = 275;
/**
* @return Auth-Application-Id value of request
*
* @throws AvpDataException if result code avp is not integer
*/
long getAuthApplicationId() throws AvpDataException;
/**
* @return termination cause
*
* @throws AvpDataException if result code avp is not integer
*/
int getTerminationCause() throws AvpDataException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cca/CCASession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cca;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
/**
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface CCASession extends AppSession, StateMachine {
// simple marker interface.
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cca/ClientCCASession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cca;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.auth.events.ReAuthAnswer;
import org.jdiameter.api.cca.events.JCreditControlRequest;
/**
* Basic class for client credit-control application specific session Listener must be injected from constructor of
* implementation class
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientCCASession extends CCASession {
/**
* Send credit-control request to server
*
* @param request Credit-Control-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendCreditControlRequest(JCreditControlRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send re-authentication answer to server
*
* @param answer Re-Auth-Answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendReAuthAnswer(ReAuthAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cca/ClientCCASessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cca;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.auth.events.ReAuthRequest;
import org.jdiameter.api.cca.events.JCreditControlAnswer;
import org.jdiameter.api.cca.events.JCreditControlRequest;
/**
* This interface defines the possible actions for the different states in the client Credit-Control Application state
* machine.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientCCASessionListener {
/**
* Notifies this ClientCCASessionListener that the ClientCCASession has received a CCA message.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
* @throws InternalException The InternalException signals that internal error has occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doCreditControlAnswer(ClientCCASession session, JCreditControlRequest request, JCreditControlAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this ClientCCASessionListener that the ClientCCASession has received a RAR message.
*
* @param session parent application session (FSM)
* @param request request object
* @throws InternalException The InternalException signals that internal error has occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
default void doReAuthRequest(ClientCCASession session, ReAuthRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
}
/**
* Notifies this ClientCCASessionListener that the ClientCCASession has received a non CCA message, usually some
* extension.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
* @throws InternalException The InternalException signals that internal error has occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
default void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
}
/**
* Provides with default value of DDFH AVP - this is used when AVP is not present or send operation fails for some
* reason.
* DDFH is of type Enumerated - int32
*
* @return
*/
default int getDefaultDDFHValue() {
return 0;
}
/**
* Provides with default value of CCFH AVP - this is used when AVP is not present or send operation fails for some
* reason.
* CCFH is of type Enumerated - int32
*
* @return
*/
default int getDefaultCCFHValue() {
return 0;
}
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cca/ServerCCASession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cca;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.auth.events.ReAuthRequest;
import org.jdiameter.api.cca.events.JCreditControlAnswer;
/**
* Basic class for server credit-control application specific session Listener must be injected from constructor of
* implementation class
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerCCASession extends CCASession {
/**
* Send credit-control answer to client
*
* @param answer Credit-Control-Answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendCreditControlAnswer(JCreditControlAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send re-authentication request to client
*
* @param request Re-Auth-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendReAuthRequest(ReAuthRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cca/ServerCCASessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cca;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.auth.events.ReAuthAnswer;
import org.jdiameter.api.auth.events.ReAuthRequest;
import org.jdiameter.api.cca.events.JCreditControlRequest;
/**
* This interface defines the possible actions for the different states in the server Credit-Control Application state
* machine.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerCCASessionListener {
/**
* Notifies this ServerCCASessionListener that the ServerCCASession has received a CCR message.
*
* @param session parent application session (FSM)
* @param request request object
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doCreditControlRequest(ServerCCASession session, JCreditControlRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this ServerCCASessionListener that the ServerCCASession has received a RAA message.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
default void doReAuthAnswer(ServerCCASession session, ReAuthRequest request, ReAuthAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
}
/**
* Notifies this ServerCCASessionListener that the ServerCCASession has received not CCA message, now it can be even
* RAA.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
default void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
}
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cca/events/JCreditControlAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cca.events;
import org.jdiameter.api.Avp;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* The Credit-Control-Answer message (CCA) is indicated by the command-code field being set to 272 and the 'R' bit being
* cleared in the Command Flags field. It is used between the credit-control server and the Diameter credit-control
* client to acknowledge a Credit-Control-Request command.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JCreditControlAnswer extends AppAnswerEvent {
String _SHORT_NAME = "CCA";
String _LONG_NAME = "Credit-Control-Answer";
int code = 272;
boolean isCreditControlFailureHandlingAVPPresent();
int getCredidControlFailureHandlingAVPValue();
boolean isDirectDebitingFailureHandlingAVPPresent();
int getDirectDebitingFailureHandlingAVPValue();
boolean isRequestTypeAVPPresent();
int getRequestTypeAVPValue();
Avp getValidityTimeAvp();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cca/events/JCreditControlRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cca.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The Credit-Control-Request message (CCR) is indicated by the command-code field being set to 272 and the 'R' bit
* being set in the Command Flags field. It is used between the Diameter credit-control client and the credit-control
* server to request credit authorization for a given service.
*
* The Auth-Application-Id MUST be set to the value 4, indicating the Diameter credit-control application.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JCreditControlRequest extends AppRequestEvent {
String _SHORT_NAME = "CCR";
String _LONG_NAME = "Credit-Control-Request";
int code = 272;
boolean isRequestedActionAVPPresent();
int getRequestedActionAVPValue();
boolean isRequestTypeAVPPresent();
int getRequestTypeAVPValue();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cxdx/ClientCxDxSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cxdx;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.cxdx.events.JLocationInfoRequest;
import org.jdiameter.api.cxdx.events.JMultimediaAuthRequest;
import org.jdiameter.api.cxdx.events.JPushProfileAnswer;
import org.jdiameter.api.cxdx.events.JRegistrationTerminationAnswer;
import org.jdiameter.api.cxdx.events.JServerAssignmentRequest;
import org.jdiameter.api.cxdx.events.JUserAuthorizationRequest;
/**
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientCxDxSession extends AppSession, StateMachine {
void sendUserAuthorizationRequest(JUserAuthorizationRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void sendServerAssignmentRequest(JServerAssignmentRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void sendLocationInformationRequest(JLocationInfoRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void sendMultimediaAuthRequest(JMultimediaAuthRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void sendRegistrationTerminationAnswer(JRegistrationTerminationAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void sendPushProfileAnswer(JPushProfileAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cxdx/ClientCxDxSessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cxdx;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.cxdx.events.JLocationInfoAnswer;
import org.jdiameter.api.cxdx.events.JLocationInfoRequest;
import org.jdiameter.api.cxdx.events.JMultimediaAuthAnswer;
import org.jdiameter.api.cxdx.events.JMultimediaAuthRequest;
import org.jdiameter.api.cxdx.events.JPushProfileRequest;
import org.jdiameter.api.cxdx.events.JRegistrationTerminationRequest;
import org.jdiameter.api.cxdx.events.JServerAssignmentAnswer;
import org.jdiameter.api.cxdx.events.JServerAssignmentRequest;
import org.jdiameter.api.cxdx.events.JUserAuthorizationAnswer;
import org.jdiameter.api.cxdx.events.JUserAuthorizationRequest;
/**
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientCxDxSessionListener {
/**
* Notifies this ClientCxDxSessionListener that the ClientCxDxSession has recived not CxDx message, usually some
* extension.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doUserAuthorizationAnswer(ClientCxDxSession session, JUserAuthorizationRequest request,
JUserAuthorizationAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doServerAssignmentAnswer(ClientCxDxSession session, JServerAssignmentRequest request, JServerAssignmentAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doRegistrationTerminationRequest(ClientCxDxSession session, JRegistrationTerminationRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doLocationInformationAnswer(ClientCxDxSession session, JLocationInfoRequest request, JLocationInfoAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doPushProfileRequest(ClientCxDxSession session, JPushProfileRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doMultimediaAuthAnswer(ClientCxDxSession session, JMultimediaAuthRequest request, JMultimediaAuthAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cxdx/ServerCxDxSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cxdx;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.cxdx.events.JLocationInfoAnswer;
import org.jdiameter.api.cxdx.events.JMultimediaAuthAnswer;
import org.jdiameter.api.cxdx.events.JPushProfileRequest;
import org.jdiameter.api.cxdx.events.JRegistrationTerminationRequest;
import org.jdiameter.api.cxdx.events.JServerAssignmentAnswer;
import org.jdiameter.api.cxdx.events.JUserAuthorizationAnswer;
/**
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerCxDxSession extends AppSession, StateMachine {
void sendUserAuthorizationAnswer(JUserAuthorizationAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void sendServerAssignmentAnswer(JServerAssignmentAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void sendLocationInformationAnswer(JLocationInfoAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void sendMultimediaAuthAnswer(JMultimediaAuthAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void sendRegistrationTerminationRequest(JRegistrationTerminationRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void sendPushProfileRequest(JPushProfileRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cxdx/ServerCxDxSessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cxdx;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.cxdx.events.JLocationInfoRequest;
import org.jdiameter.api.cxdx.events.JMultimediaAuthRequest;
import org.jdiameter.api.cxdx.events.JPushProfileAnswer;
import org.jdiameter.api.cxdx.events.JPushProfileRequest;
import org.jdiameter.api.cxdx.events.JRegistrationTerminationAnswer;
import org.jdiameter.api.cxdx.events.JRegistrationTerminationRequest;
import org.jdiameter.api.cxdx.events.JServerAssignmentRequest;
import org.jdiameter.api.cxdx.events.JUserAuthorizationRequest;
/**
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerCxDxSessionListener {
/**
* Notifies this ClientCxDxSessionListener that the ClientCxDxSession has recived not CxDx message, usually some
* extension.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doUserAuthorizationRequest(ServerCxDxSession session, JUserAuthorizationRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doServerAssignmentRequest(ServerCxDxSession session, JServerAssignmentRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doRegistrationTerminationAnswer(ServerCxDxSession session, JRegistrationTerminationRequest request,
JRegistrationTerminationAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doLocationInformationRequest(ServerCxDxSession session, JLocationInfoRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doPushProfileAnswer(ServerCxDxSession session, JPushProfileRequest request, JPushProfileAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doMultimediaAuthRequest(ServerCxDxSession session, JMultimediaAuthRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cxdx/events/JLocationInfoAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cxdx.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* The Location-Info-Answer (LIA) command, indicated by the Command-Code field set to 302 and the bit cleared in the
* Command Flags field, is sent by a server in response to the Location-Info-Request command.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JLocationInfoAnswer extends AppAnswerEvent {
String _SHORT_NAME = "LIA";
String _LONG_NAME = "Location-Info-Answer";
int code = 302;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cxdx/events/JLocationInfoRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cxdx.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The Location-Info-Request (LIR) command, indicated by the Command-Code field set to 302 and the bit set in the
* Command Flags field, is sent by a Diameter Multimedia client to a Diameter Multimedia server in order to request name
* of the server that is currently serving the user.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JLocationInfoRequest extends AppRequestEvent {
String _SHORT_NAME = "LIR";
String _LONG_NAME = "Location-Info-Request";
int code = 302;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cxdx/events/JMultimediaAuthAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cxdx.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* The Multimedia-Auth-Answer (MAA) command, indicated by the Command-Code field set to 303 and the bit cleared in the
* Command Flags field, is sent by a server in response to the Multimedia-Auth-Request command.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JMultimediaAuthAnswer extends AppAnswerEvent {
String _SHORT_NAME = "MAA";
String _LONG_NAME = "Multimedia-Auth-Answer";
int code = 303;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cxdx/events/JMultimediaAuthRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cxdx.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The Multimedia-Auth-Request (MAR) command, indicated by the Command-Code field set to 303 and the bit set in the
* Command Flags field, is sent by a Diameter Multimedia client to a Diameter Multimedia server in order to request
* security information.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JMultimediaAuthRequest extends AppRequestEvent {
String _SHORT_NAME = "MAR";
String _LONG_NAME = "Multimedia-Auth-Request";
int code = 303;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cxdx/events/JPushProfileAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cxdx.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* The Push-Profile-Answer (PPA) command, indicated by the Command-Code field set to 305 and the bit cleared in the
* Command Flags field, is sent by a client in response to the Push-Profile-Request command.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JPushProfileAnswer extends AppAnswerEvent {
String _SHORT_NAME = "PPA";
String _LONG_NAME = "Push-Profile-Answer";
int code = 305;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cxdx/events/JPushProfileRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cxdx.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The Push-Profile-Request (PPR) command, indicated by the Command-Code field set to 305 and the bit set in the Command
* Flags field, is sent by a Diameter Multimedia server to a Diameter Multimedia client in order to update the
* subscription data and for SIP Digest authentication the authentication data of a multimedia user in the Diameter
* Multimedia client whenever a modification has occurred in the subscription data or digest password that constitutes
* the data used by the client.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JPushProfileRequest extends AppRequestEvent {
String _SHORT_NAME = "PPR";
String _LONG_NAME = "Push-Profile-Request";
int code = 305;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cxdx/events/JRegistrationTerminationAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cxdx.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* The Registration-Termination-Answer (RTA) command, indicated by the Command-Code field set to 304 and the bit cleared
* in the Command Flags field, is sent by a client in response to the Registration-Termination-Request command.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JRegistrationTerminationAnswer extends AppAnswerEvent {
String _SHORT_NAME = "RTA";
String _LONG_NAME = "Registration-Termination-Answer";
int code = 304;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cxdx/events/JRegistrationTerminationRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cxdx.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The Registration-Termination-Request (RTR) command, indicated by the Command-Code field set to 304 and the bit set in
* the Command Flags field, is sent by a Diameter Multimedia server to a Diameter Multimedia client in order to request
* the de-registration of a user.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JRegistrationTerminationRequest extends AppRequestEvent {
String _SHORT_NAME = "RTR";
String _LONG_NAME = "Registration-Termination-Request";
int code = 304;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cxdx/events/JServerAssignmentAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cxdx.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* The Server-Assignment-Answer (SAA) command, indicated by the Command-Code field set to 301 and the bit cleared in the
* Command Flags field, is sent by a server in response to the Server-Assignment-Request command. If Result-Code or
* Experimental-Result does not inform about an error, the User-Data AVP shall contain the information that the S-CSCF
* needs to give service to the user.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JServerAssignmentAnswer extends AppAnswerEvent {
String _SHORT_NAME = "SAA";
String _LONG_NAME = "Server-Assignment-Answer";
int code = 301;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cxdx/events/JServerAssignmentRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cxdx.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The Server-Assignment-Request (SAR) command, indicated by the Command-Code field set to 301 and the bit set in the
* Command Flags field, is sent by a Diameter Multimedia client to a Diameter Multimedia server in order to request it
* to store the name of the server that is currently serving the user.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JServerAssignmentRequest extends AppRequestEvent {
String _SHORT_NAME = "SAR";
String _LONG_NAME = "Server-Assignment-Request";
int code = 301;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cxdx/events/JUserAuthorizationAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cxdx.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* The User-Authorization-Answer (UAA) command, indicated by the Command-Code field set to 300 and the bit cleared in
* the Command Flags field, is sent by a server in response to the User-Authorization-Request command.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JUserAuthorizationAnswer extends AppAnswerEvent {
String _SHORT_NAME = "UAA";
String _LONG_NAME = "User-Authorization-Answer";
int code = 300;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/cxdx/events/JUserAuthorizationRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.cxdx.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The User-Authorization-Request (UAR) command, indicated by the Command-Code field set to 300 and the bit set in the
* Command Flags field, is sent by a Diameter Multimedia client to a Diameter Multimedia server in order to request the
* authorization of the registration of a multimedia user.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JUserAuthorizationRequest extends AppRequestEvent {
String _SHORT_NAME = "UAR";
String _LONG_NAME = "User-Authorization-Request";
int code = 300;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/gq/ClientGqSessionListener.java
================================================
package org.jdiameter.api.gq;
import org.jdiameter.api.auth.ClientAuthSessionListener;
public interface ClientGqSessionListener extends ClientAuthSessionListener {
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/gq/GqClientSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.gq;
import org.jdiameter.api.auth.ClientAuthSession;
/**
* Basic class for Client Gq application specific session Listener must be injected from constructor of implementation
* class
*
* @author Yulian Oifa
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface GqClientSession extends ClientAuthSession {
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/gq/GqServerSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.gq;
import org.jdiameter.api.auth.ServerAuthSession;
/**
* Basic class for Server Gq application specific session Listener must be injected from constructor of implementation
* class
*
* @author Yulian Oifa
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface GqServerSession extends ServerAuthSession {
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/gq/ServerGqSessionListener.java
================================================
package org.jdiameter.api.gq;
import org.jdiameter.api.auth.ServerAuthSessionListener;
public interface ServerGqSessionListener extends ServerAuthSessionListener {
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/gx/ClientGxSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.gx;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.gx.events.GxCreditControlRequest;
import org.jdiameter.api.gx.events.GxReAuthAnswer;
/**
* Basic class for Gx client credit-control application specific session. Listener must be injected from constructor of
* implementation class.
*
* @author Carl-Magnus Björkell
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientGxSession extends AppSession, StateMachine {
/**
* Send credit-control request to server.
*
* @param request Credit-Control-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendCreditControlRequest(final GxCreditControlRequest request)
throws InternalException, IllegalDiameterStateException, RouteException,
OverloadException;
/**
* Send re-authentication answer to server
*
* @param answer Re-Auth-Answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendGxReAuthAnswer(final GxReAuthAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/gx/ClientGxSessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.gx;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.gx.events.GxCreditControlAnswer;
import org.jdiameter.api.gx.events.GxCreditControlRequest;
import org.jdiameter.api.gx.events.GxReAuthRequest;
/**
* This interface defines the possible actions for the different states in the client Credit-Control Application state
* machine.
*
* @author Carl-Magnus Björkell
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientGxSessionListener {
/**
* Notifies this ClientGxSessionListener that the ClientGxSession has received a Ro message.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
* @throws InternalException The InternalException signals that internal error has occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doCreditControlAnswer(ClientGxSession session, GxCreditControlRequest request, GxCreditControlAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this ClientGxSessionListener that the ClientGxSession has received a RAR message.
*
* @param session parent application session (FSM)
* @param request request object
* @throws InternalException The InternalException signals that internal error has occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
default void doGxReAuthRequest(ClientGxSession session, GxReAuthRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
}
/**
* Notifies this ClientGxSessionListener that the ClientGxSession has received a non Gx message, usually some
* extension.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
* @throws InternalException The InternalException signals that internal error has occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
default void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
}
/**
* Provides with default value of DDFH AVP - this is used when AVP is not present or send operation fails for some
* reason.
* DDFH is of type Enumerated - int32
*
* @return
*/
default int getDefaultDDFHValue() {
return 0;
}
/**
* Provides with default value of CCFH AVP - this is used when AVP is not present or send operation fails for some
* reason.
* CCFH is of type Enumerated - int32
*
* @return
*/
default int getDefaultCCFHValue() {
return 0;
}
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/gx/ServerGxSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.gx;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.gx.events.GxCreditControlAnswer;
import org.jdiameter.api.gx.events.GxReAuthRequest;
/**
* Basic class for server credit-control application specific session. Listener must be injected from constructor of
* implementation class
*
* @author Carl-Magnus Björkell
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerGxSession extends AppSession, StateMachine {
/**
* Send credit-control answer to client
*
* @param answer Credit-Control-Answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendCreditControlAnswer(GxCreditControlAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send re-authentication request to client
*
* @param request Re-Auth-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendGxReAuthRequest(GxReAuthRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/gx/ServerGxSessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.gx;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.gx.events.GxCreditControlRequest;
import org.jdiameter.api.gx.events.GxReAuthAnswer;
import org.jdiameter.api.gx.events.GxReAuthRequest;
/**
* This interface defines the possible actions for the different states in the server Credit-Control Application state
* machine.
*
* @author Carl-Magnus Björkell
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerGxSessionListener {
/**
* Notifies this ServerRoSessionListener that the ServerRoSession has received a CCR message.
*
* @param session parent application session (FSM)
* @param request request object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doCreditControlRequest(ServerGxSession session, GxCreditControlRequest request)
throws InternalException, IllegalDiameterStateException,
RouteException, OverloadException;
/**
* Notifies this ServerRoSessionListener that the ServerRoSession has received a RAA message.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doGxReAuthAnswer(ServerGxSession session, GxReAuthRequest request, GxReAuthAnswer answer)
throws InternalException, IllegalDiameterStateException,
RouteException, OverloadException;
/**
* Notifies this ServerRoSessionListener that the ServerRoSession has received not Ro message, now it can be even
* RAA.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException,
RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/gx/events/GxCreditControlAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.gx.events;
import org.jdiameter.api.Avp;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* The Credit-Control-Answer (CCA) messages, indicated by the Command-Code field set to 272 is sent by the OCF to the
* CTF in order to reply to the CCR.
*
* @author Carl-Magnus Björkell
*/
@SuppressWarnings("all") //3rd party lib
public interface GxCreditControlAnswer extends AppAnswerEvent {
String _SHORT_NAME = "CCA";
String _LONG_NAME = "Credit-Control-Answer";
int code = 272;
boolean isCreditControlFailureHandlingAVPPresent();
int getCredidControlFailureHandlingAVPValue();
boolean isDirectDebitingFailureHandlingAVPPresent();
int getDirectDebitingFailureHandlingAVPValue();
boolean isRequestTypeAVPPresent();
int getRequestTypeAVPValue();
Avp getValidityTimeAvp();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/gx/events/GxCreditControlRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.gx.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The CCR messages, indicated by the Command-Code field set to 272 is sent by the CTF to the OCF in order to request
* credits for the request bearer / subsystem / service.
*
* @author Carl-Magnus Björkell
*/
@SuppressWarnings("all") //3rd party lib
public interface GxCreditControlRequest extends AppRequestEvent {
String _SHORT_NAME = "CCR";
String _LONG_NAME = "Credit-Control-Request";
int code = 272;
boolean isRequestedActionAVPPresent();
int getRequestedActionAVPValue();
boolean isRequestTypeAVPPresent();
int getRequestTypeAVPValue();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/gx/events/GxReAuthAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.gx.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* The Credit-Control-Answer (CCA) messages, indicated by the Command-Code field set to 272 is sent by the OCF to the
* CTF in order to reply to the CCR.
*
* @author Carl-Magnus Björkell
*/
@SuppressWarnings("all") //3rd party lib
public interface GxReAuthAnswer extends AppAnswerEvent {
String _SHORT_NAME = "RAA";
String _LONG_NAME = "Re-Auth-Answer";
int code = 258;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/gx/events/GxReAuthRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.gx.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The CCR messages, indicated by the Command-Code field set to 272 is sent by the CTF to the OCF in order to request
* credits for the request bearer / subsystem / service.
*
* @author Carl-Magnus Björkell
*/
@SuppressWarnings("all") //3rd party lib
public interface GxReAuthRequest extends AppRequestEvent {
String _SHORT_NAME = "RAR";
String _LONG_NAME = "Re-Auth-Request";
int code = 258;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/rf/ClientRfSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.rf;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.rf.events.RfAccountingRequest;
/**
* Basic class for Rf accounting application specific session Listener must injection from constructor of implementation
* class
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientRfSession extends AppSession, StateMachine {
/**
* Send Account Request to Server
*
* @param request request object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalStateException The IllegalStateException signals that session has incorrect state (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendAccountRequest(RfAccountingRequest request)
throws InternalException, IllegalStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/rf/ClientRfSessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.rf;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.rf.events.RfAccountingAnswer;
import org.jdiameter.api.rf.events.RfAccountingRequest;
/**
* This interface defines the possible actions that the different states in the Accounting state machine.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientRfSessionListener {
/**
* Notifies this AccSessionEventListener that the ClientAccSesssion has received AccAnswer message.
*
* @param appSession parent application session (FSM)
* @param request accounting request object
* @param answer accounting answer object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doRfAccountingAnswerEvent(ClientRfSession appSession, RfAccountingRequest request, RfAccountingAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this AccSessionEventListener that the ClientAccSesssion has received not account message.
*
* @param appSession parent application session (FSM)
* @param request request object
* @param answer answer object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doOtherEvent(AppSession appSession, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/rf/ServerRfSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.rf;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.rf.events.RfAccountingAnswer;
/**
* Basic class for server Rf accounting application specific session. Listener must injection from constructor of
* implementation class.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerRfSession extends AppSession, StateMachine {
/**
* Send Account Answer to Client
*
* @param answer request object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalStateException The IllegalStateException signals that session has incorrect state (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendAccountAnswer(RfAccountingAnswer answer)
throws InternalException, IllegalStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/rf/ServerRfSessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.rf;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.rf.events.RfAccountingRequest;
/**
* This interface defines the possible actions that the different states in the Accounting state machine
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerRfSessionListener {
/**
* Notifies this AccSessionEventListener that the ServerAccSesssion has recived AccRequest message.
*
* @param appSession parent application session (FSM)
* @param request accounting request object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doRfAccountingRequestEvent(ServerRfSession appSession, RfAccountingRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this AuthSessionEventListener that the ServerAuthSesssion has recived not authentication message.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/rf/events/RfAccountingAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.rf.events;
import org.jdiameter.api.AvpDataException;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* The Accounting Answer (ACA) messages, indicated by the Command-Code field set to 271 is sent by the CDF to the CTF in
* order to reply to the ACR.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface RfAccountingAnswer extends AppAnswerEvent {
String _SHORT_NAME = "ACA";
String _LONG_NAME = "Accounting-Answer";
int code = 271;
/**
* @return Record type of answer
*
* @throws org.jdiameter.api.AvpDataException if result code avp is not integer
*/
int getAccountingRecordType() throws AvpDataException;
/**
* @return record number
*
* @throws AvpDataException if result code avp is not integer
*/
long getAccountingRecordNumber() throws AvpDataException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/rf/events/RfAccountingRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.rf.events;
import org.jdiameter.api.AvpDataException;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The ACR messages, indicated by the Command-Code field set to 271 is sent by the CTF to the CDF in order to send
* charging information for the request bearer / subsystem / service.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface RfAccountingRequest extends AppRequestEvent {
String _SHORT_NAME = "ACR";
String _LONG_NAME = "Accounting-Request";
int code = 271;
/**
* @return Record type of request
*
* @throws AvpDataException if result code avp is not integer
*/
int getAccountingRecordType() throws AvpDataException;
/**
* @return record number
*
* @throws AvpDataException if result code avp is not integer
*/
long getAccountingRecordNumber() throws AvpDataException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/ro/ClientRoSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.ro;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.auth.events.ReAuthAnswer;
import org.jdiameter.api.ro.events.RoCreditControlRequest;
/**
* Basic class for Ro client credit-control application specific session Listener must be injected from constructor of
* implementation class
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientRoSession extends AppSession, StateMachine {
/**
* Send credit-control request to server
*
* @param request Credit-Control-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendCreditControlRequest(RoCreditControlRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send re-authentication answer to server
*
* @param answer Re-Auth-Answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendReAuthAnswer(ReAuthAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/ro/ClientRoSessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.ro;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.auth.events.ReAuthRequest;
import org.jdiameter.api.ro.events.RoCreditControlAnswer;
import org.jdiameter.api.ro.events.RoCreditControlRequest;
/**
* This interface defines the possible actions for the different states in the client Credit-Control Application state
* machine.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientRoSessionListener {
/**
* Notifies this ClientRoSessionListener that the ClientRoSession has received a Ro message.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
*
* @throws InternalException The InternalException signals that internal error has occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doCreditControlAnswer(ClientRoSession session, RoCreditControlRequest request, RoCreditControlAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this ClientRoSessionListener that the ClientRoSession has received a RAR message.
*
* @param session parent application session (FSM)
* @param request request object
*
* @throws InternalException The InternalException signals that internal error has occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doReAuthRequest(ClientRoSession session, ReAuthRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this ClientRoSessionListener that the ClientRoSession has received a non Ro message, usually some
* extension.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
*
* @throws InternalException The InternalException signals that internal error has occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Provides with default value of DDFH AVP - this is used when AVP is not present or send operation fails for some
* reason.
* DDFH is of type Enumerated - int32
*
* @return
*/
int getDefaultDDFHValue();
/**
* Provides with default value of CCFH AVP - this is used when AVP is not present or send operation fails for some
* reason.
* CCFH is of type Enumerated - int32
*
* @return
*/
int getDefaultCCFHValue();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/ro/ServerRoSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.ro;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.auth.events.ReAuthRequest;
import org.jdiameter.api.ro.events.RoCreditControlAnswer;
/**
* Basic class for server credit-control application specific session Listener must be injected from constructor of
* implementation class
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerRoSession extends AppSession, StateMachine {
/**
* Send credit-control answer to client
*
* @param answer Credit-Control-Answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendCreditControlAnswer(RoCreditControlAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send re-authentication request to client
*
* @param request Re-Auth-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendReAuthRequest(ReAuthRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/ro/ServerRoSessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.ro;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.auth.events.ReAuthAnswer;
import org.jdiameter.api.auth.events.ReAuthRequest;
import org.jdiameter.api.ro.events.RoCreditControlRequest;
/**
* This interface defines the possible actions for the different states in the server Credit-Control Application state
* machine.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerRoSessionListener {
/**
* Notifies this ServerRoSessionListener that the ServerRoSession has received a CCR message.
*
* @param session parent application session (FSM)
* @param request request object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doCreditControlRequest(ServerRoSession session, RoCreditControlRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this ServerRoSessionListener that the ServerRoSession has received a RAA message.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doReAuthAnswer(ServerRoSession session, ReAuthRequest request, ReAuthAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this ServerRoSessionListener that the ServerRoSession has received not Ro message, now it can be even
* RAA.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/ro/events/RoCreditControlAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.ro.events;
import org.jdiameter.api.Avp;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* The Credit-Control-Answer (CCA) messages, indicated by the Command-Code field set to 272 is sent by the OCF to the
* CTF in order to reply to the CCR.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface RoCreditControlAnswer extends AppAnswerEvent {
String _SHORT_NAME = "CCA";
String _LONG_NAME = "Credit-Control-Answer";
int code = 272;
boolean isCreditControlFailureHandlingAVPPresent();
int getCredidControlFailureHandlingAVPValue();
boolean isDirectDebitingFailureHandlingAVPPresent();
int getDirectDebitingFailureHandlingAVPValue();
boolean isRequestTypeAVPPresent();
int getRequestTypeAVPValue();
Avp getValidityTimeAvp();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/ro/events/RoCreditControlRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.ro.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The CCR messages, indicated by the Command-Code field set to 272 is sent by the CTF to the OCF in order to request
* credits for the request bearer / subsystem / service.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface RoCreditControlRequest extends AppRequestEvent {
String _SHORT_NAME = "CCR";
String _LONG_NAME = "Credit-Control-Request";
int code = 272;
boolean isRequestedActionAVPPresent();
int getRequestedActionAVPValue();
boolean isRequestTypeAVPPresent();
int getRequestTypeAVPValue();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/rx/ClientRxSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.rx;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.rx.events.RxAARequest;
import org.jdiameter.api.rx.events.RxAbortSessionAnswer;
import org.jdiameter.api.rx.events.RxReAuthAnswer;
import org.jdiameter.api.rx.events.RxSessionTermRequest;
/**
* Basic class for Rx Client Interface specific session. Listener must be injected from constructor of implementation
* class.
*
* @author Richard Good
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientRxSession extends AppSession, StateMachine {
void sendAARequest(final RxAARequest request) throws InternalException, IllegalDiameterStateException, RouteException,
OverloadException;
void sendSessionTermRequest(final RxSessionTermRequest request)
throws InternalException, IllegalDiameterStateException, RouteException,
OverloadException;
void sendReAuthAnswer(final RxReAuthAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void sendAbortSessionAnswer(final RxAbortSessionAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/rx/ClientRxSessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.rx;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.rx.events.*;
/**
* This interface defines the possible actions for the different states in the client Rx Interface state machine.
*
* @author Richard Good
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientRxSessionListener {
void doAAAnswer(ClientRxSession session, RxAARequest request, RxAAAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
default void doReAuthRequest(ClientRxSession session, RxReAuthRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
}
default void doSessionTermAnswer(ClientRxSession session, RxSessionTermRequest request, RxSessionTermAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
}
default void doAbortSessionRequest(ClientRxSession session, RxAbortSessionRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
}
default void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
}
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/rx/ServerRxSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.rx;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.rx.events.RxAAAnswer;
import org.jdiameter.api.rx.events.RxAbortSessionRequest;
import org.jdiameter.api.rx.events.RxReAuthRequest;
import org.jdiameter.api.rx.events.RxSessionTermAnswer;
/**
* Basic class for Rx Server Interface specific session. Listener must be injected from constructor of implementation
* class
*
* @author Richard Good
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerRxSession extends AppSession, StateMachine {
void sendAAAnswer(RxAAAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void sendSessionTermAnswer(RxSessionTermAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void sendReAuthRequest(RxReAuthRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void sendAbortSessionRequest(RxAbortSessionRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/rx/ServerRxSessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.rx;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.rx.events.*;
/**
* This interface defines the possible actions for the different states in the server Rx Interface state machine.
*
* @author Richard Good
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerRxSessionListener {
void doAARequest(ServerRxSession session, RxAARequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
default void doSessionTermRequest(ServerRxSession session, RxSessionTermRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
}
default void doReAuthAnswer(ServerRxSession session, RxReAuthRequest request, RxReAuthAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
}
default void doAbortSessionAnswer(ServerRxSession session, RxAbortSessionRequest request, RxAbortSessionAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
}
default void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
}
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/rx/events/RxAAAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.rx.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* The AAA command, indicated by the Command-Code field set to 265 and the 'R' bit cleared in the Command Flags field,
* is sent by the PCRF to the AF in response to the AAR command.
*
* @author Richard Good
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface RxAAAnswer extends AppAnswerEvent {
String _SHORT_NAME = "AAA";
String _LONG_NAME = "AA-Answer";
int code = 265;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/rx/events/RxAARequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.rx.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The AAR command, indicated by the Command-Code field set to 265 and the 'R' bit set in the Command Flags field, is
* sent by an AF to the PCRF in order to provide it with the Session Information.
*
* @author Richard Good
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface RxAARequest extends AppRequestEvent {
String _SHORT_NAME = "AAR";
String _LONG_NAME = "AA-Request";
int code = 265;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/rx/events/RxAbortSessionAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.rx.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* The ASA command, indicated by the Command-Code field set to 274 and the 'R' bit cleared in the Command Flags field,
* is sent by the AF to the PCRF in response to the ASR command.
*
* @author Richard Good
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface RxAbortSessionAnswer extends AppAnswerEvent {
String _SHORT_NAME = "ASA";
String _LONG_NAME = "Abort-Session-Answer";
int code = 274;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/rx/events/RxAbortSessionRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.rx.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The ASR command, indicated by the Command-Code field set to 274 and the 'R' bit set in the Command Flags field, is
* sent by a PCRF to the AF in order to abort a session.
*
* @author Richard Good
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface RxAbortSessionRequest extends AppRequestEvent {
String _SHORT_NAME = "ASR";
String _LONG_NAME = "Abort-Session-Request";
int code = 274;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/rx/events/RxReAuthAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.rx.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* The RAA command, indicated by the Command-Code field set to 258 and the 'R' bit cleared in the Command Flags field,
* is sent by the AF to the PCRf in response to the RAR command.
*
* @author Richard Good
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface RxReAuthAnswer extends AppAnswerEvent {
String _SHORT_NAME = "RAA";
String _LONG_NAME = "Re-Auth-Answer";
int code = 258;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/rx/events/RxReAuthRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.rx.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The RAR command, indicated by the Command-Code field set to 258 and the 'R' bit set in the Command Flags field, is
* sent by an PCRF to the AF in order to provide it with the Session Information.
*
* @author Richard Good
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface RxReAuthRequest extends AppRequestEvent {
String _SHORT_NAME = "RAR";
String _LONG_NAME = "Re-Auth-Request";
int code = 258;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/rx/events/RxSessionTermAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.rx.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* The STA command, indicated by the Command-Code field set to 275 and the 'R' bit cleared in the Command Flags field,
* is sent by the PCRF to the AF in response to the STR command.
*
* @author Richard Good
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface RxSessionTermAnswer extends AppAnswerEvent {
String _SHORT_NAME = "STA";
String _LONG_NAME = "Session-Termination-Answer";
int code = 275;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/rx/events/RxSessionTermRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.rx.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The STR command, indicated by the Command-Code field set to 275 and the 'R' bit set in the Command Flags field, is
* sent by an AF to the PCRF in order to terminate a session.
*
* @author Richard Good
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface RxSessionTermRequest extends AppRequestEvent {
String _SHORT_NAME = "STR";
String _LONG_NAME = "Session-Termination-Request";
int code = 275;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s13/ClientS13Session.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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.jdiameter.api.s13;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.s13.events.JMEIdentityCheckRequest;
@SuppressWarnings("all") //3rd party lib
public interface ClientS13Session extends AppSession, StateMachine {
/**
* Send ME-Identity-Check-Request to server
*
* @param request ME-Identity-Check-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendMEIdentityCheckRequest(JMEIdentityCheckRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s13/ClientS13SessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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.jdiameter.api.s13;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.s13.events.JMEIdentityCheckAnswer;
import org.jdiameter.api.s13.events.JMEIdentityCheckRequest;
@SuppressWarnings("all") //3rd party lib
public interface ClientS13SessionListener {
void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doMEIdentityCheckAnswerEvent(ClientS13Session session, JMEIdentityCheckRequest request, JMEIdentityCheckAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s13/ServerS13Session.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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.jdiameter.api.s13;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.s13.events.JMEIdentityCheckAnswer;
@SuppressWarnings("all") //3rd party lib
public interface ServerS13Session extends AppSession, StateMachine {
/**
* Send ME-Identity-Check-Answer to client
*
* @param answer ME-Identity-Check-Answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendMEIdentityCheckAnswer(JMEIdentityCheckAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s13/ServerS13SessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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.jdiameter.api.s13;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.s13.events.JMEIdentityCheckRequest;
@SuppressWarnings("all") //3rd party lib
public interface ServerS13SessionListener {
void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doMEIdentityCheckRequestEvent(ServerS13Session session, JMEIdentityCheckRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s13/events/JMEIdentityCheckAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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.jdiameter.api.s13.events;
import org.jdiameter.api.app.AppAnswerEvent;
@SuppressWarnings("all") //3rd party lib
public interface JMEIdentityCheckAnswer extends AppAnswerEvent {
String _SHORT_NAME = "ECA";
String _LONG_NAME = "ME-Identity-Check-Answer";
int code = 324;
boolean isEquipmentStatusAVPPresent();
int getEquipmentStatus();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s13/events/JMEIdentityCheckRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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.jdiameter.api.s13.events;
import org.jdiameter.api.Avp;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The ECR command, indicated by the Command-Code field set to 324 and the 'R' bit set in the Command Flags field, is
* sent by MME or SGSN to EIR to check the Mobile Equipment's identity status (e.g. to check that it has not been
* stolen, or, to verify that it does not have faults).
*/
@SuppressWarnings("all") //3rd party lib
public interface JMEIdentityCheckRequest extends AppRequestEvent {
String _SHORT_NAME = "ECR";
String _LONG_NAME = "ME-Identity-Check-Request";
int code = 324;
Avp getTerminalInformationAvp();
boolean hasIMEI();
String getIMEI();
boolean hasTgpp2MEID();
byte[] getTgpp2MEID();
boolean hasSoftwareVersion();
String getSoftwareVersion();
boolean isUserNameAVPPresent();
String getUserName();
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/ClientS6aSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.s6a.events.JAuthenticationInformationRequest;
import org.jdiameter.api.s6a.events.JCancelLocationAnswer;
import org.jdiameter.api.s6a.events.JDeleteSubscriberDataAnswer;
import org.jdiameter.api.s6a.events.JInsertSubscriberDataAnswer;
import org.jdiameter.api.s6a.events.JNotifyRequest;
import org.jdiameter.api.s6a.events.JPurgeUERequest;
import org.jdiameter.api.s6a.events.JResetAnswer;
import org.jdiameter.api.s6a.events.JUpdateLocationRequest;
/**
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientS6aSession extends AppSession, StateMachine {
/**
* Send Authentication-Information-Request to server
*
* @param request Authentication-Information-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendAuthenticationInformationRequest(JAuthenticationInformationRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send Purge-UE-Request to server
*
* @param request Purge-UE-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendPurgeUERequest(JPurgeUERequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send Notify-Request to server
*
* @param request Notify-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendNotifyRequest(JNotifyRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send Update-Location-Request to server
*
* @param request Update-Location-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendUpdateLocationRequest(JUpdateLocationRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send Cancel-Location-Answer to server
*
* @param answer Cancel-Location-Answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendCancelLocationAnswer(JCancelLocationAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send Insert-Subscriber-Data-Answer to server
*
* @param answer Insert-Subscriber-Data-Answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendInsertSubscriberDataAnswer(JInsertSubscriberDataAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send Delete-Subscriber-Data-Answer to server
*
* @param answer Delete-Subscriber-Data-Answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendDeleteSubscriberDataAnswer(JDeleteSubscriberDataAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send Reset-Answer to server
*
* @param answer Reset-Answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendResetAnswer(JResetAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/ClientS6aSessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.s6a.events.JAuthenticationInformationAnswer;
import org.jdiameter.api.s6a.events.JAuthenticationInformationRequest;
import org.jdiameter.api.s6a.events.JCancelLocationRequest;
import org.jdiameter.api.s6a.events.JDeleteSubscriberDataRequest;
import org.jdiameter.api.s6a.events.JInsertSubscriberDataRequest;
import org.jdiameter.api.s6a.events.JNotifyAnswer;
import org.jdiameter.api.s6a.events.JNotifyRequest;
import org.jdiameter.api.s6a.events.JPurgeUEAnswer;
import org.jdiameter.api.s6a.events.JPurgeUERequest;
import org.jdiameter.api.s6a.events.JResetRequest;
import org.jdiameter.api.s6a.events.JUpdateLocationAnswer;
import org.jdiameter.api.s6a.events.JUpdateLocationRequest;
/**
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientS6aSessionListener {
void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doCancelLocationRequestEvent(ClientS6aSession session, JCancelLocationRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doInsertSubscriberDataRequestEvent(ClientS6aSession session, JInsertSubscriberDataRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doDeleteSubscriberDataRequestEvent(ClientS6aSession session, JDeleteSubscriberDataRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doResetRequestEvent(ClientS6aSession session, JResetRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doAuthenticationInformationAnswerEvent(ClientS6aSession session, JAuthenticationInformationRequest request,
JAuthenticationInformationAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doPurgeUEAnswerEvent(ClientS6aSession session, JPurgeUERequest request, JPurgeUEAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doUpdateLocationAnswerEvent(ClientS6aSession session, JUpdateLocationRequest request, JUpdateLocationAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doNotifyAnswerEvent(ClientS6aSession session, JNotifyRequest request, JNotifyAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/ServerS6aSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.s6a.events.JAuthenticationInformationAnswer;
import org.jdiameter.api.s6a.events.JCancelLocationRequest;
import org.jdiameter.api.s6a.events.JDeleteSubscriberDataRequest;
import org.jdiameter.api.s6a.events.JInsertSubscriberDataRequest;
import org.jdiameter.api.s6a.events.JNotifyAnswer;
import org.jdiameter.api.s6a.events.JPurgeUEAnswer;
import org.jdiameter.api.s6a.events.JResetRequest;
import org.jdiameter.api.s6a.events.JUpdateLocationAnswer;
/**
* @author Alexandre Mendonca
* @author Richard Good
* @author Paul Carter-Brown
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerS6aSession extends AppSession, StateMachine {
/**
* Send Cancel-Location-Request to client
*
* @param request Cancel-Location-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendCancelLocationRequest(JCancelLocationRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send Insert-Subscriber-Data-Request to client
*
* @param request Insert-Subscriber-Data-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendInsertSubscriberDataRequest(JInsertSubscriberDataRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send Delete-Subscriber-Data-Request to client
*
* @param request Delete-Subscriber-Data-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendDeleteSubscriberDataRequest(JDeleteSubscriberDataRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send Reset-Request to client
*
* @param request Reset-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendResetRequest(JResetRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send Authentication-Information-Answer to client
*
* @param answer Authentication-Information-Answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendAuthenticationInformationAnswer(JAuthenticationInformationAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send Purge-UE-Answer to client
*
* @param answer Purge-UE-Answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendPurgeUEAnswer(JPurgeUEAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send Notify-Answer to client
*
* @param answer Notify-Answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendNotifyAnswer(JNotifyAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send Update-Location-Answer to client
*
* @param answer Update-Location-Answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendUpdateLocationAnswer(JUpdateLocationAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/ServerS6aSessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.s6a.events.JAuthenticationInformationRequest;
import org.jdiameter.api.s6a.events.JCancelLocationAnswer;
import org.jdiameter.api.s6a.events.JCancelLocationRequest;
import org.jdiameter.api.s6a.events.JDeleteSubscriberDataAnswer;
import org.jdiameter.api.s6a.events.JDeleteSubscriberDataRequest;
import org.jdiameter.api.s6a.events.JInsertSubscriberDataAnswer;
import org.jdiameter.api.s6a.events.JInsertSubscriberDataRequest;
import org.jdiameter.api.s6a.events.JNotifyRequest;
import org.jdiameter.api.s6a.events.JPurgeUERequest;
import org.jdiameter.api.s6a.events.JResetAnswer;
import org.jdiameter.api.s6a.events.JResetRequest;
import org.jdiameter.api.s6a.events.JUpdateLocationRequest;
/**
* @author Alexandre Mendonca
* @author Richard Good
* @author Paul Carter-Brown
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerS6aSessionListener {
void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doAuthenticationInformationRequestEvent(ServerS6aSession session, JAuthenticationInformationRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doPurgeUERequestEvent(ServerS6aSession session, JPurgeUERequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doUpdateLocationRequestEvent(ServerS6aSession session, JUpdateLocationRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doNotifyRequestEvent(ServerS6aSession session, JNotifyRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doCancelLocationAnswerEvent(ServerS6aSession session, JCancelLocationRequest request, JCancelLocationAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doInsertSubscriberDataAnswerEvent(ServerS6aSession session, JInsertSubscriberDataRequest request,
JInsertSubscriberDataAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doDeleteSubscriberDataAnswerEvent(ServerS6aSession session, JDeleteSubscriberDataRequest request,
JDeleteSubscriberDataAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doResetAnswerEvent(ServerS6aSession session, JResetRequest request, JResetAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/events/JAuthenticationInformationAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* @author Alexandre Mendonca
* @author Richard Good
* @author Paul Carter-Brown
*/
@SuppressWarnings("all") //3rd party lib
public interface JAuthenticationInformationAnswer extends AppAnswerEvent {
String _SHORT_NAME = "AIA";
String _LONG_NAME = "Authentication-Information-Answer";
int code = 318;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/events/JAuthenticationInformationRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* @author Alexandre Mendonca
* @author Richard Good
* @author Paul Carter-Brown
*/
@SuppressWarnings("all") //3rd party lib
public interface JAuthenticationInformationRequest extends AppRequestEvent {
String _SHORT_NAME = "AIR";
String _LONG_NAME = "Authentication-Information-Request";
int code = 318;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/events/JCancelLocationAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JCancelLocationAnswer extends AppAnswerEvent {
String _SHORT_NAME = "CLA";
String _LONG_NAME = "Cancel-Location-Answer";
int code = 317;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/events/JCancelLocationRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JCancelLocationRequest extends AppRequestEvent {
String _SHORT_NAME = "CLR";
String _LONG_NAME = "Cancel-Location-Request";
int code = 317;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/events/JDeleteSubscriberDataAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JDeleteSubscriberDataAnswer extends AppAnswerEvent {
String _SHORT_NAME = "DSA";
String _LONG_NAME = "Delete-Subscriber-Data-Answer";
int code = 320;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/events/JDeleteSubscriberDataRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JDeleteSubscriberDataRequest extends AppRequestEvent {
String _SHORT_NAME = "DSR";
String _LONG_NAME = "Delete-Subscriber-Data-Request";
int code = 320;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/events/JInsertSubscriberDataAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JInsertSubscriberDataAnswer extends AppAnswerEvent {
String _SHORT_NAME = "IDA";
String _LONG_NAME = "Insert-Subscriber-Data-Answer";
int code = 319;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/events/JInsertSubscriberDataRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JInsertSubscriberDataRequest extends AppRequestEvent {
String _SHORT_NAME = "IDR";
String _LONG_NAME = "Insert-Subscriber-Data-Request";
int code = 319;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/events/JNotifyAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JNotifyAnswer extends AppAnswerEvent {
String _SHORT_NAME = "NOA";
String _LONG_NAME = "Notify-Answer";
int code = 323;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/events/JNotifyRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JNotifyRequest extends AppRequestEvent {
String _SHORT_NAME = "NOR";
String _LONG_NAME = "Notify-Request";
int code = 323;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/events/JPurgeUEAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* @author Alexandre Mendonca
* @author Richard Good
* @author Paul Carter-Brown
*/
@SuppressWarnings("all") //3rd party lib
public interface JPurgeUEAnswer extends AppAnswerEvent {
String _SHORT_NAME = "PUA";
String _LONG_NAME = "Purge-UE-Answer";
int code = 321;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/events/JPurgeUERequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* @author Alexandre Mendonca
* @author Richard Good
* @author Paul Carter-Brown
*/
@SuppressWarnings("all") //3rd party lib
public interface JPurgeUERequest extends AppRequestEvent {
String _SHORT_NAME = "PUR";
String _LONG_NAME = "Purge-UE-Request";
int code = 321;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/events/JResetAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JResetAnswer extends AppAnswerEvent {
String _SHORT_NAME = "RSA";
String _LONG_NAME = "Reset-Answer";
int code = 322;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/events/JResetRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface JResetRequest extends AppRequestEvent {
String _SHORT_NAME = "RSR";
String _LONG_NAME = "Reset-Request";
int code = 322;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/events/JUpdateLocationAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* @author Alexandre Mendonca
* @author Richard Good
* @author Paul Carter-Brown
*/
@SuppressWarnings("all") //3rd party lib
public interface JUpdateLocationAnswer extends AppAnswerEvent {
String _SHORT_NAME = "ULA";
String _LONG_NAME = "Update-Location-Answer";
int code = 316;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/s6a/events/JUpdateLocationRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.s6a.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* @author Alexandre Mendonca
* @author Richard Good
* @author Paul Carter-Brown
*/
@SuppressWarnings("all") //3rd party lib
public interface JUpdateLocationRequest extends AppRequestEvent {
String _SHORT_NAME = "ULR";
String _LONG_NAME = "Update-Location-Request";
int code = 316;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/sh/ClientShSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.sh;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.sh.events.ProfileUpdateRequest;
import org.jdiameter.api.sh.events.PushNotificationAnswer;
import org.jdiameter.api.sh.events.SubscribeNotificationsRequest;
import org.jdiameter.api.sh.events.UserDataRequest;
/**
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientShSession extends AppSession, StateMachine {
/**
* Send profile update request to server
*
* @param request Authentication-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendProfileUpdateRequest(ProfileUpdateRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send subscription request to server
*
* @param request Authentication-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendSubscribeNotificationsRequest(SubscribeNotificationsRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send user data request to server
*
* @param request Authentication-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendUserDataRequest(UserDataRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void sendPushNotificationAnswer(PushNotificationAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/sh/ClientShSessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.sh;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.sh.events.ProfileUpdateAnswer;
import org.jdiameter.api.sh.events.ProfileUpdateRequest;
import org.jdiameter.api.sh.events.PushNotificationRequest;
import org.jdiameter.api.sh.events.SubscribeNotificationsAnswer;
import org.jdiameter.api.sh.events.SubscribeNotificationsRequest;
import org.jdiameter.api.sh.events.UserDataAnswer;
import org.jdiameter.api.sh.events.UserDataRequest;
/**
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientShSessionListener {
void doSubscribeNotificationsAnswerEvent(ClientShSession session, SubscribeNotificationsRequest request,
SubscribeNotificationsAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doProfileUpdateAnswerEvent(ClientShSession session, ProfileUpdateRequest request, ProfileUpdateAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doPushNotificationRequestEvent(ClientShSession session, PushNotificationRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doUserDataAnswerEvent(ClientShSession session, UserDataRequest request, UserDataAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this ShSessionEventListener that the ClientShSession has received not Sh message.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/sh/ServerShSession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.sh;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.sh.events.ProfileUpdateAnswer;
import org.jdiameter.api.sh.events.PushNotificationRequest;
import org.jdiameter.api.sh.events.SubscribeNotificationsAnswer;
import org.jdiameter.api.sh.events.UserDataAnswer;
/**
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerShSession extends AppSession, StateMachine {
/**
* Send profile update notification request to client
*
* @param request Authentication-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendPushNotificationRequest(PushNotificationRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send profile update answer to client
*
* @param request Authentication-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendProfileUpdateAnswer(ProfileUpdateAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send subscribe notification answer to client
*
* @param request Authentication-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendSubscribeNotificationsAnswer(SubscribeNotificationsAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send user data answer to client
*
* @param request Authentication-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
**/
void sendUserDataAnswer(UserDataAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/sh/ServerShSessionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.sh;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.sh.events.ProfileUpdateRequest;
import org.jdiameter.api.sh.events.PushNotificationAnswer;
import org.jdiameter.api.sh.events.PushNotificationRequest;
import org.jdiameter.api.sh.events.SubscribeNotificationsRequest;
import org.jdiameter.api.sh.events.UserDataRequest;
/**
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerShSessionListener {
void doSubscribeNotificationsRequestEvent(ServerShSession session, SubscribeNotificationsRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doProfileUpdateRequestEvent(ServerShSession session, ProfileUpdateRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doPushNotificationAnswerEvent(ServerShSession session, PushNotificationRequest request, PushNotificationAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doUserDataRequestEvent(ServerShSession session, UserDataRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Notifies this ShSessionEventListener that the ServerShSession has received not Sh message.
*
* @param session parent application session (FSM)
* @param request request object
* @param answer answer object
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/sh/events/ProfileUpdateAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.sh.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* The Profile-Update-Answer (PUA) command, indicated by the Command-Code field set to 307 and the bit cleared in the
* Command Flags field, is sent by a server in response to the Profile-Update-Request command.
*
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface ProfileUpdateAnswer extends AppAnswerEvent {
String _SHORT_NAME = "PUA";
String _LONG_NAME = "Profile-Update-Answer";
int code = 307;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/sh/events/ProfileUpdateRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.sh.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The Profile-Update-Request (PUR) command, indicated by the Command-Code field set to 307 and the bit set in the
* Command Flags field, is sent by a Diameter client to a Diameter server in order to update user data in the server.
*
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface ProfileUpdateRequest extends AppRequestEvent {
String _SHORT_NAME = "PUR";
String _LONG_NAME = "Profile-Update-Request";
int code = 307;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/sh/events/PushNotificationAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.sh.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* The Push-Notifications-Answer (PNA) command, indicated by the Command-Code field set to 309 and the bit cleared in
* the Command Flags field, is sent by a client in response to the Push-Notification-Request command.
*
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface PushNotificationAnswer extends AppAnswerEvent {
String _SHORT_NAME = "PNA";
String _LONG_NAME = "Push-Notification-Answer";
int code = 309;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/sh/events/PushNotificationRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.sh.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The Push-Notification-Request (PNR) command, indicated by the Command-Code field set to 309 and the bit set in the
* Command Flags field, is sent by a Diameter server to a Diameter client in order to notify changes in the user data in
* the server.
*
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface PushNotificationRequest extends AppRequestEvent {
String _SHORT_NAME = "PNR";
String _LONG_NAME = "Push-Notification-Request";
int code = 309;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/sh/events/SubscribeNotificationsAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.sh.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* The Subscribe-Notifications-Answer command, indicated by the Command-Code field set to 308 and the bit cleared in the
* Command Flags field, is sent by a server in response to the Subscribe-Notifications-Request command.
*
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface SubscribeNotificationsAnswer extends AppAnswerEvent {
String _SHORT_NAME = "SNA";
String _LONG_NAME = "Subscribe-Notifications-Answer";
int code = 308;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/sh/events/SubscribeNotificationsRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.sh.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The Subscribe-Notifications-Request (SNR) command, indicated by the Command-Code field set to 308 and the bit set in
* the Command Flags field, is sent by a Diameter client to a Diameter server in order to request notifications of
* changes in user data.
*
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface SubscribeNotificationsRequest extends AppRequestEvent {
String _SHORT_NAME = "SNR";
String _LONG_NAME = "Subscribe-Notifications-Request";
int code = 308;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/sh/events/UserDataAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.sh.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* The User-Data-Answer (UDA) command, indicated by the Command-Code field set to 306 and the bit cleared in the Command
* Flags field, is sent by a server in response to the User-Data-Request command.
*
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface UserDataAnswer extends AppAnswerEvent {
String _SHORT_NAME = "UDA";
String _LONG_NAME = "User-Data-Answer";
int code = 306;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/sh/events/UserDataRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.sh.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* The User-Data-Request (UDR) command, indicated by the Command-Code field set to 306 and the bit set in the Command
* Flags field, is sent by a Diameter client to a Diameter server in order to request user data.
*
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface UserDataRequest extends AppRequestEvent {
String _SHORT_NAME = "UDR";
String _LONG_NAME = "User-Data-Request";
int code = 306;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/slg/ClientSLgSession.java
================================================
/*
*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2017, 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.jdiameter.api.slg;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.slg.events.LocationReportAnswer;
import org.jdiameter.api.slg.events.ProvideLocationRequest;
/**
* @author Fernando Mendioroz
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientSLgSession extends AppSession, StateMachine {
/**
* Send Provide-Location-Request to server
*
* @param request Provide-Location-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendProvideLocationRequest(ProvideLocationRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send Location-Report-Answer to server
*
* @param answer Location-Report-Answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendLocationReportAnswer(LocationReportAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/slg/ClientSLgSessionListener.java
================================================
/*
*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2017, 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.jdiameter.api.slg;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.slg.events.LocationReportRequest;
import org.jdiameter.api.slg.events.ProvideLocationAnswer;
import org.jdiameter.api.slg.events.ProvideLocationRequest;
/**
* @author Fernando Mendioroz
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientSLgSessionListener {
void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doProvideLocationAnswerEvent(ClientSLgSession session, ProvideLocationRequest request, ProvideLocationAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doLocationReportRequestEvent(ClientSLgSession session, LocationReportRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/slg/ServerSLgSession.java
================================================
/*
*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2017, 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.jdiameter.api.slg;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.slg.events.LocationReportRequest;
import org.jdiameter.api.slg.events.ProvideLocationAnswer;
/**
* @author Fernando Mendioroz
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerSLgSession extends AppSession, StateMachine {
/**
* Send Provide-Location-Answer to client
*
* @param answer Provide-Location-Answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendProvideLocationAnswer(ProvideLocationAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
/**
* Send Location-Report-Request to client
*
* @param request Location-Report-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendLocationReportRequest(LocationReportRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/slg/ServerSLgSessionListener.java
================================================
/*
*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2017, 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.jdiameter.api.slg;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.slg.events.LocationReportAnswer;
import org.jdiameter.api.slg.events.LocationReportRequest;
import org.jdiameter.api.slg.events.ProvideLocationRequest;
/**
* @author Fernando Mendioroz
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerSLgSessionListener {
void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doProvideLocationRequestEvent(ServerSLgSession session, ProvideLocationRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doLocationReportAnswerEvent(ServerSLgSession session, LocationReportRequest request, LocationReportAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/slg/events/LocationReportAnswer.java
================================================
/*
*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2017, 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.jdiameter.api.slg.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* @author Fernando Mendioroz
*/
/*
* As for 3GPP TS 29.172 v13.0.0, Subscriber Location Report operation is used by an MME or SGSN to provide the location of a
* target UE to a GMLC, when a request for location has been implicitly issued or when a Delayed Location Reporting is triggered
* after receipt of a request for location for a UE transiently not reachable.
*
* The Location-Report-Answer (LRA) command, indicated by the Command-Code field set to 8388621 and the "R" bit cleared in the
* Command Flags field, is sent by the GMLC to the MME or SGSN in response to the Location-Report-Request command (Subscriber
* Location Report operation answer).
*/
@SuppressWarnings("all") //3rd party lib
public interface LocationReportAnswer extends AppAnswerEvent {
String _SHORT_NAME = "LRA";
String _LONG_NAME = "Location-Report-Answer";
int code = 8388621;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/slg/events/LocationReportRequest.java
================================================
/*
*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2017, 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.jdiameter.api.slg.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* @author Fernando Mendioroz
*/
/*
* As for 3GPP TS 29.172 v13.0.0, Subscriber Location Report operation is used by an MME or SGSN to provide the location of a
* target UE to a GMLC, when a request for location has been implicitly issued or when a Delayed Location Reporting is triggered
* after receipt of a request for location for a UE transiently not reachable.
*
* The Location-Report-Request (LRR) command, indicated by the Command-Code field set to 8388621 and the "R" bit set in the
* Command Flags field, is sent by the MME or SGSN in order to provide subscriber location data to the GMLC (Subscriber Location
* Report operation request)
*/
@SuppressWarnings("all") //3rd party lib
public interface LocationReportRequest extends AppRequestEvent {
String _SHORT_NAME = "LRR";
String _LONG_NAME = "Location-Report-Request";
int code = 8388621;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/slg/events/ProvideLocationAnswer.java
================================================
/*
*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2017, 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.jdiameter.api.slg.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* @author Fernando Mendioroz
*/
/*
* As for 3GPP TS 29.172 v13.0.0, the Provide Subscriber Location operation is used by a GMLC to request the location of a
* target UE from the MME or SGSN at any time, as part of EPC-MT-LR (Evolved Packet Core Mobile Terminated Location Request) or
* PS-MT-LR (Packet Switched Mobile Terminated Location Request) positioning procedures. The response contains a location
* estimate of the target UE and other additional information. This operation is also used by a GMLC to request the location of
* the target UE from the SGSN at any time, as part of deferred MT-LR procedure. The response contains the acknowledgment of the
* receipt of the request and other additional information.
*
* The Provide-Location-Answer (PLA) command, indicated by the Command-Code field set to 8388620 and the "R" bit cleared in the
* Command Flags field, is sent by the MME or SGSN to the GMLC in response to the Provide-Location-Request command (Provide
* Subscriber Location operation answer)
*/
@SuppressWarnings("all") //3rd party lib
public interface ProvideLocationAnswer extends AppAnswerEvent {
String _SHORT_NAME = "PLA";
String _LONG_NAME = "Provide-Location-Answer";
int code = 8388620;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/slg/events/ProvideLocationRequest.java
================================================
/*
*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2017, 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.jdiameter.api.slg.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* @author Fernando Mendioroz
*/
/*
* As for 3GPP TS 29.172 v13.0.0, the Provide Subscriber Location operation is used by a GMLC to request the location of a
* target UE from the MME or SGSN at any time, as part of EPC-MT-LR (Evolved Packet Core Mobile Terminated Location Request) or
* PS-MT-LR (Packet Switched Mobile Terminated Location Request) positioning procedures. The response contains a location
* estimate of the target UE and other additional information. This operation is also used by a GMLC to request the location of
* the target UE from the SGSN at any time, as part of deferred MT-LR procedure. The response contains the acknowledgment of the
* receipt of the request and other additional information.
*
* The Provide-Location-Request (PLR) command, indicated by the Command-Code field set to 8388620 and the "R" bit set in the
* Command Flags field, is sent by the GMLC in order to request subscriber location to the MME or SGSN (Provide Subscriber
* Location operation request)
*/
@SuppressWarnings("all") //3rd party lib
public interface ProvideLocationRequest extends AppRequestEvent {
String _SHORT_NAME = "PLR";
String _LONG_NAME = "Provide-Location-Request";
int code = 8388620;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/slh/ClientSLhSession.java
================================================
/*
*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2017, 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.jdiameter.api.slh;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.slh.events.LCSRoutingInfoRequest;
/**
* @author Fernando Mendioroz
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientSLhSession extends AppSession, StateMachine {
/**
* Send LCS-Routing-Info-Request to server
*
* @param request LCS-Routing-Info-Request event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendLCSRoutingInfoRequest(LCSRoutingInfoRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/slh/ClientSLhSessionListener.java
================================================
/*
*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2017, 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.jdiameter.api.slh;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.slh.events.LCSRoutingInfoAnswer;
import org.jdiameter.api.slh.events.LCSRoutingInfoRequest;
/**
* @author Fernando Mendioroz
*/
@SuppressWarnings("all") //3rd party lib
public interface ClientSLhSessionListener {
void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doLCSRoutingInfoAnswerEvent(ClientSLhSession session, LCSRoutingInfoRequest request, LCSRoutingInfoAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/slh/ServerSLhSession.java
================================================
/*
*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2017, 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.jdiameter.api.slh;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.api.slh.events.LCSRoutingInfoAnswer;
/**
* @author Fernando Mendioroz
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerSLhSession extends AppSession, StateMachine {
/**
* Send LCS-Routing-Info-Answer to client
*
* @param answer LCS-Routing-Info-Answer event instance
*
* @throws InternalException The InternalException signals that internal error is occurred.
* @throws IllegalDiameterStateException The IllegalStateException signals that session has incorrect state
* (invalid).
* @throws RouteException The NoRouteException signals that no route exist for a given realm.
* @throws OverloadException The OverloadException signals that destination host is overloaded.
*/
void sendLCSRoutingInfoAnswer(LCSRoutingInfoAnswer answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/slh/ServerSLhSessionListener.java
================================================
/*
*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2017, 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.jdiameter.api.slh;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.app.AppAnswerEvent;
import org.jdiameter.api.app.AppRequestEvent;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.api.slh.events.LCSRoutingInfoRequest;
/**
* @author Fernando Mendioroz
*/
@SuppressWarnings("all") //3rd party lib
public interface ServerSLhSessionListener {
void doOtherEvent(AppSession session, AppRequestEvent request, AppAnswerEvent answer)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
void doLCSRoutingInfoRequestEvent(ServerSLhSession session, LCSRoutingInfoRequest request)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/slh/events/LCSRoutingInfoAnswer.java
================================================
/*
*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2017, 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.jdiameter.api.slh.events;
import org.jdiameter.api.app.AppAnswerEvent;
/**
* @author Fernando Mendioroz
*/
/*
* As for 3GPP TS 29.173 v13.0.0, the LCS-Routing-Info-Answer (RIA) command, indicated by the Command-Code field set to 8388622
* and the "R" bit cleared in the Command Flags field, is sent from HSS to GMLC. The procedure invoked by the GMLC is used for
* retrieving routing information for LCS (Location Services) for a specified user from the HSS via a LCS-Routing-Info-Request
* (RIR) command.
*
*/
@SuppressWarnings("all") //3rd party lib
public interface LCSRoutingInfoAnswer extends AppAnswerEvent {
String _SHORT_NAME = "RIA";
String _LONG_NAME = "LCS-Routing-Info-Answer";
int code = 8388622;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/slh/events/LCSRoutingInfoRequest.java
================================================
/*
*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2017, 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.jdiameter.api.slh.events;
import org.jdiameter.api.app.AppRequestEvent;
/**
* @author Fernando Mendioroz
*/
/*
* As for 3GPP TS 29.173 v13.0.0, the LCS-Routing-Info-Request (RIR) command, indicated by the Command-Code field set to 8388622
* and the "R" bit set in the Command Flags field, is sent from GMLC to HSS. The procedure invoked by the GMLC is used for
* retrieving routing information for LCS (Location Services) for a specified user from the HSS.
*
*/
@SuppressWarnings("all") //3rd party lib
public interface LCSRoutingInfoRequest extends AppRequestEvent {
String _SHORT_NAME = "RIR";
String _LONG_NAME = "LCS-Routing-Info-Request";
int code = 8388622;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/validation/AvpNotAllowedException.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.validation;
/**
* Class to indicate error in AVP add operation.
*
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public class AvpNotAllowedException extends RuntimeException {
private static final long serialVersionUID = 1L;
private int avpCode = -1;
private long vendorId = -1L;
/**
*
*/
public AvpNotAllowedException(int code, long vendor) {
this.avpCode = code;
this.vendorId = vendor;
}
/**
* @param message
*/
public AvpNotAllowedException(String message, int code, long vendor) {
super(message);
this.avpCode = code;
this.vendorId = vendor;
}
/**
* @param cause
*/
public AvpNotAllowedException(Throwable cause, int code, long vendor) {
super(cause);
this.avpCode = code;
this.vendorId = vendor;
}
/**
* @param message
* @param cause
*/
public AvpNotAllowedException(String message, Throwable cause, int code, long vendor) {
super(message, cause);
this.avpCode = code;
this.vendorId = vendor;
}
public int getAvpCode() {
return avpCode;
}
public long getVendorId() {
return vendorId;
}
@Override
public String toString() {
return "AvpNotAllowedException [avpCode=" + avpCode + ", vendorId=" + vendorId + ", toString()=" + super.toString()
+ "]";
}
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/validation/AvpRepresentation.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.validation;
import java.util.List;
import org.jdiameter.api.Avp;
import org.jdiameter.api.AvpSet;
/**
* Represents avp, it stores info about presence, multiplicity, avp code, vendor.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
* @since 1.5.4.0-build404
*/
@SuppressWarnings("all") //3rd party lib
public interface AvpRepresentation {
/**
*
* Represents multiplicity of AVP:
* 0 The AVP MUST NOT be present in the message.
*
*/
String _MP_NOT_ALLOWED = "0";
/**
*
* Represents multiplicity of AVP:
* 0+ Zero or more instances of the AVP MAY be present in the message.
*
*/
String _MP_ZERO_OR_MORE = "0+";
/**
*
* Represents multiplicity of AVP:
* 0-1 Zero or one instance of the AVP MAY be present in the message.
* It is considered an error if there are more than one instance of the AVP.
*
*/
String _MP_ZERO_OR_ONE = "0-1";
/**
*
* Represents multiplicity of AVP:
* 1 One instance of the AVP MUST be present in the message.
* message.
*
*/
String _MP_ONE = "1";
/**
*
* Represents multiplicity of AVP:
* 1+ At least one instance of the AVP MUST be present in the
* message.
*
*/
String _MP_ONE_AND_MORE = "1+";
String _DEFAULT_MANDATORY = "may";
String _DEFAULT_PROTECTED = "may";
String _DEFAULT_VENDOR = "mustnot";
int _FIX_POSITION_INDEX = -1;
enum Rule {
must,
may,
mustnot,
shouldnot
}
;
enum Type {
OctetString,
Integer32,
Integer64,
Unsigned32,
Unsigned64,
Float32,
Float64,
Grouped,
Address,
Time,
UTF8String,
DiameterIdentity,
DiameterURI,
Enumerated,
IPFilterRule,
QoSFilterRule
}
;
boolean isPositionFixed();
//public void markFixPosition(int index);
boolean isCountValidForMultiplicity(int avpCount);
boolean isCountValidForMultiplicity(AvpSet destination, int numberToAdd);
boolean isAllowed(int avpCode, long vendorId);
boolean isAllowed(int avpCode);
int getPositionIndex();
int getCode();
long getVendorId();
boolean isAllowed();
String getMultiplicityIndicator();
String getName();
boolean isGrouped();
//public void setGrouped(boolean grouped);
List getChildren();
//public void setChildren(List children);
//public void setCode(int code);
//public void setVendorId(long vendor);
//public void setMultiplicityIndicator(String multiplicityIndicator);
//public void setName(String name);
boolean isWeak();
//public void markWeak(boolean isWeak);
String getDescription();
boolean isMayEncrypt();
String getRuleMandatory();
int getRuleMandatoryAsInt();
String getRuleProtected();
int getRuleProtectedAsInt();
String getRuleVendorBit();
int getRuleVendorBitAsInt();
String getOriginalType();
String getType();
boolean isProtected();
boolean isMandatory();
/**
* Validates passed avp.
*
* @param avp - simply avp which should be confronted vs definition
*/
void validate(Avp avp) throws AvpNotAllowedException;
/**
* Validates passed avp.
*
* @param avpSet - AvpSet which represents internal content of this avp
*/
void validate(AvpSet avpSet) throws AvpNotAllowedException;
@Override
String toString();
@Override
int hashCode();
@Override
boolean equals(Object obj);
Object clone() throws CloneNotSupportedException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/validation/Dictionary.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.validation;
import java.io.InputStream;
import org.jdiameter.api.Message;
/**
* Second generation Dictionary/Validator. This interface is exposed directly.
*
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.1
*/
@SuppressWarnings("all") //3rd party lib
public interface Dictionary {
/**
* Fetches Avp representation for given code. If no such AVP is found,
* null value is returned.
*
* @param code - positive integer, equal to AVP code.
*
* @return AvpRepresentation for given code or null
*/
AvpRepresentation getAvp(int code);
/**
* Fetches Avp representation for given code and vendorId. If no such AVP is found, null value is returned.
*
* @param code - positive integer, equal to AVP code.
* @param vendorId - positive long representing vendor code.
*
* @return AvpRepresentation for given code/vendor pair or null
*/
AvpRepresentation getAvp(int code, long vendorId);
/**
* Fetches Avp representation for given name. If no such AVP is found,
* null value is returned.
*
* @param name - name of AVP, like Session-Id.
*
* @return AvpRepresentation for given name or null
*/
AvpRepresentation getAvp(String avpName);
/**
* @param commandCode - command code of message
* @param isRequest - switches if lookup searches for request or answer
*
* @return message representation for given code and flag value or
* null
*/
MessageRepresentation getMessage(int commandCode, boolean isRequest);
/**
* @param commandCode - command code of message
* @param applicationId - application id present in message header
* @param isRequest - switches if lookup searches for request or answer
*
* @return message representation for given code, application and flag value or null
*/
MessageRepresentation getMessage(int commandCode, long applicationId, boolean isRequest);
/**
* Configures dictionary. It can be called multiple times, each call reconfigures dictionary.
*
* @param is
*/
void configure(InputStream is);
// Validator ----------------------------------------------------------------
/**
* Gets whether validator is enabled.
*
* @return
*
*
true if validator is enabled
*
false if validator is disabled
*
*/
boolean isEnabled();
/**
* Sets whether validator is enabled.
*
* @param enabled true to enable the validator, false to disable it
*/
void setEnabled(boolean enabled);
/**
* Gets whether validator is configured.
*
* @return
*
*
true if validator has been initialized
*
false if validator has not yet been initialized
*
*/
boolean isConfigured();
/**
* Gets validator level for OUTGOING messages. Possible values are defined at {@link ValidatorLevel}
*
* @return an instance of {@link ValidatorLevel} representing the current level
*/
ValidatorLevel getSendLevel();
/**
* Gets validator level for OUTGOING messages. Possible values are defined at {@link ValidatorLevel}
*
* @param sendLevel an instance of {@link ValidatorLevel} representing the new level
*/
void setSendLevel(ValidatorLevel sendLevel);
/**
* Gets validator level for INCOMING messages. Possible values are defined at {@link ValidatorLevel}
*
* @return an instance of {@link ValidatorLevel} representing the current level
*/
ValidatorLevel getReceiveLevel();
/**
* Sets validator level for INCOMING messages. Possible values are defined at {@link ValidatorLevel}
*
* @param receiveLevel an instance of {@link ValidatorLevel} representing the new level
*/
void setReceiveLevel(ValidatorLevel receiveLevel);
/**
* Performs validation according to configured levels
*
* @param message - message we want to validate
* @param incoming - flag indicating if {@link #message} is incoming message or outgoing.
*
* @throws AvpNotAllowedException - in case validation fails. Exception has details(avp code and similar) about
* failure.
*/
void validate(Message message, boolean incoming) throws AvpNotAllowedException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/validation/MessageRepresentation.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.validation;
import java.util.Map;
import org.jdiameter.api.AvpSet;
import org.jdiameter.api.Message;
/**
* This class represents message/command in validation framework. It contains basic info about command along with avp
* list - their multiplicity and allowance.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
* @since 1.5.4.0-build404
*/
@SuppressWarnings("all") //3rd party lib
public interface MessageRepresentation {
Map getMessageAvps();
int getCommandCode();
long getApplicationId();
boolean isRequest();
String getName();
/**
* Fetches Avp representation for given code. If no such AVP is found,
* null value is returned. AVP must be top level AVP to be fetched by
* this operation.
*
* @param code - positive integer, equal to AVP code.
*
* @return AvpRepresentation for given code or null
*/
AvpRepresentation getAvp(int code);
/**
* Fetches Avp representation for given code and vendorId. If no such AVP is found, null value is returned.
* AVP must be top level AVP to be fetched by this operation.
*
* @param code - positive integer, equal to AVP code.
* @param vendorId - positive long representing vendor code.
*
* @return AvpRepresentation for given code/vendor pair or null
*/
AvpRepresentation getAvp(int code, long vendorId);
boolean isCountValidForMultiplicity(int code, int avpCount);
boolean isCountValidForMultiplicity(int code, long vendorId, int avpCount);
boolean isCountValidForMultiplicity(AvpSet destination, int code, long vendorId, int numberToAdd);
boolean isCountValidForMultiplicity(AvpSet destination, int code, int numberToAdd);
boolean isCountValidForMultiplicity(AvpSet destination, int code, long vendorId);
boolean isCountValidForMultiplicity(AvpSet destination, int code);
boolean isAllowed(int avpCode, long vendorId);
boolean isAllowed(int avpCode);
void validate(Message msg, ValidatorLevel validatorLevel) throws AvpNotAllowedException;
}
================================================
FILE: core/jdiameter/api/src/main/java/org/jdiameter/api/validation/ValidatorLevel.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.api.validation;
/**
* Represents possible levels for Diameter Validator
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
* @since 1.5.4.0-build404
*/
@SuppressWarnings("all") //3rd party lib
public class ValidatorLevel {
public static final String _OFF = "OFF";
public static final String _MESSAGE = "MESSAGE";
public static final String _ALL = "ALL";
public static final ValidatorLevel OFF = new ValidatorLevel(_OFF);
public static final ValidatorLevel MESSAGE = new ValidatorLevel(_MESSAGE);
public static final ValidatorLevel ALL = new ValidatorLevel(_ALL);
private String name = null;
private ValidatorLevel(String name) {
super();
this.name = name;
}
public static ValidatorLevel fromString(String s) throws IllegalArgumentException {
if (s.toUpperCase().equals(_OFF)) {
return OFF;
}
if (s.toUpperCase().equals(_MESSAGE)) {
return MESSAGE;
}
if (s.toUpperCase().equals(_ALL)) {
return ALL;
}
throw new IllegalArgumentException("No level for such value: " + s);
}
@Override
public String toString() {
return "ValidatorLevel [name=" + name + "]";
}
}
================================================
FILE: core/jdiameter/impl/pom.xml
================================================
4.0.0io.quarkiverse.jdiameterjdiameter-core2.5.1-SNAPSHOT../pom.xmljdiameter-implQuarkus :: JDiameter Stack :: ImplQuarkusio.quarkiverse.jdiameterjdiameter-apiorg.slf4jslf4j-api${slf4j.version}org.slf4jslf4j-ext${slf4j.version}commons-poolcommons-pool${commons-pool.version}io.nettynetty-all${netty.version}providedorg.junit.jupiterjunit-jupiter-enginetest${junit.version}org.junit.jupiterjunit-jupiter-apitest${junit.version}org.junit.jupiterjunit-jupiter${junit.version}testsrc/main/resourcestrue
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/IAnswer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api;
import org.jdiameter.api.Answer;
/**
* This interface describe extends methods of base class Now is empty Data: $Date: 2008/07/03 19:43:10 $ Revision:
* $Revision: 1.1 $
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.0.1
*/
@SuppressWarnings("all") //3rd party lib
public interface IAnswer extends Answer {
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/IAssembler.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api;
/**
* This interface provide IOC functionality Data: $Date: 2009/10/10 20:17:57 $ Revision: $Revision: 1.2 $
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.0.1
*/
@SuppressWarnings("all") //3rd party lib
public interface IAssembler {
/**
* Return parent IOC
*
* @return IOC instance
*/
IAssembler getParent();
/**
* Return all children
*
* @return all children
*/
IAssembler[] getChilds();
/**
* Register new component
*
* @param aClass class of component
*
* @return instance of component
*/
T getComponentInstance(Class aClass);
/**
* Register new component
*
* @param object instance of component
*/
void registerComponentInstance(Object object);
/**
* Register new component
*
* @param aClass class of component
* @param object instance of component
*/
void registerComponentImplementation(Class> aClass, Object object);
/**
* Release all attached resources
*/
void destroy();
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/IContainer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api;
import java.io.IOException;
import java.util.concurrent.ScheduledExecutorService;
import org.jdiameter.api.AvpDataException;
import org.jdiameter.api.Configuration;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.NetworkReqListener;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.Stack;
import org.jdiameter.common.api.concurrent.IConcurrentFactory;
/**
* This interface extends behavior of stack interface Data: $Date: 2008/07/03 19:43:10 $ Revision: $Revision: 1.1 $
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.0.1
*/
@SuppressWarnings("all") //3rd party lib
public interface IContainer extends Stack {
/**
* Return state of stack
*
* @return Return state of stack
*/
StackState getState();
/**
* Return configuration instance
*
* @return configuration instance
*/
Configuration getConfiguration();
/**
* Return root IOC
*
* @return root IOC
*/
IAssembler getAssemblerFacility();
/**
* Return common Scheduled Executor Service
*
* @return common Scheduled Executor Service
*/
ScheduledExecutorService getScheduledFacility();
/**
* Return common concurrent factory
*
* @return
*/
IConcurrentFactory getConcurrentFactory();
/**
* Send message
*
* @param session session instance
*
* @throws RouteException
* @throws AvpDataException
* @throws IllegalDiameterStateException
* @throws IOException
*/
void sendMessage(IMessage session) throws RouteException, AvpDataException, IllegalDiameterStateException, IOException;
/**
* Add session listener
*
* @param sessionId session id
* @param listener listener instance
*/
void addSessionListener(String sessionId, NetworkReqListener listener);
/**
* Remove session event listener by sessionId
*
* @param sessionId session identifier
*/
void removeSessionListener(String sessionId);
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/IEventListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api;
import org.jdiameter.api.Answer;
import org.jdiameter.api.EventListener;
import org.jdiameter.api.Request;
/**
* This interface describe extends methods of base class Data: $Date: 2008/07/03 19:43:10 $ Revision: $Revision: 1.1 $
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.0.1
*/
@SuppressWarnings("all") //3rd party lib
public interface IEventListener extends EventListener {
/**
* Set value of valid field
*
* @param value true is listener yet valid
*/
void setValid(boolean value);
/**
* Return rue if event listener valid(session is not released)
*
* @return rue if event listener valid
*/
boolean isValid();
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/IMessage.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.jdiameter.api.ApplicationId;
import org.jdiameter.client.api.controller.IPeer;
/**
* This interface extends basic message interface Data: $Date: 2009/07/27 18:05:03 $ Revision: $Revision: 1.2 $
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.0.1
*/
@SuppressWarnings("all") //3rd party lib
public interface IMessage extends IRequest, IAnswer {
/**
* The message is not sent to the network
*/
int STATE_NOT_SENT = 0;
/**
* The message has been sent to the network
*/
int STATE_SENT = 1;
/**
* The message is buffered ( not use yet )
*/
int STATE_BUFFERED = 2;
/**
* Stack received answer to this message
*/
int STATE_ANSWERED = 3;
/**
* Return state of message
*
* @return state of message
*/
int getState();
/**
* Set new state
*
* @param newState new state value
*/
void setState(int newState);
/**
* Return header applicationId
*
* @return header applicationId
*/
long getHeaderApplicationId();
/**
* Set header message application id
*
* @param applicationId header message application id
*/
void setHeaderApplicationId(long applicationId);
/**
* Return flags as inteher
*
* @return flags as inteher
*/
int getFlags();
/**
* Create timer for request timout procedure
*
* @param scheduledFacility timer facility
* @param timeOut value of timeout
* @param timeUnit time unit
*/
void createTimer(ScheduledExecutorService scheduledFacility, long timeOut, TimeUnit timeUnit);
/**
* Execute timer task
*/
void runTimer();
/**
* Cancel timer
*/
void clearTimer();
/**
* Set hop by hop id
*
* @param hopByHopId hopByHopId value
*/
void setHopByHopIdentifier(long hopByHopId);
/**
* Set end by end id
*
* @param endByEndId endByEndId value
*/
void setEndToEndIdentifier(long endByEndId);
/**
* Return attached peer
*
* @return attached peer
*/
IPeer getPeer();
/**
* Attach message to peer
*
* @param peer attached peer
*/
void setPeer(IPeer peer);
/**
* Return application id
*
* @return application id
*/
ApplicationId getSingleApplicationId();
/**
* Return application id
*
* @return application id
*/
ApplicationId getSingleApplicationId(long id);
/**
* Check timeout
*
* @return true if request has timeout
*/
boolean isTimeOut();
/**
* Set event listener
*
* @param listener event listener
*/
void setListener(IEventListener listener);
/**
* Return event listener
*
* @return event listener
*/
IEventListener getEventListener();
/**
* Return duplication key of message
*
* @return duplication key of message
*/
String getDuplicationKey();
/**
* Generate duplication key
*
* @param host origination host
* @param endToEndId end to end id
*
* @return duplication key
*/
String getDuplicationKey(String host, long endToEndId);
/**
* Create clone object
*
* @return clone
*/
Object clone();
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/IMetaData.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api;
import org.jdiameter.api.MetaData;
/**
* This interface describe extends methods of base class Data: $Date: 2008/07/03 19:43:10 $ Revision: $Revision: 1.1 $
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.0.1
*/
@SuppressWarnings("all") //3rd party lib
public interface IMetaData extends MetaData {
/**
* Set new value of host state
*/
void updateLocalHostStateId();
/**
* Return host state value
*
* @return host state value
*/
long getLocalHostStateId();
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/IRequest.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api;
import org.jdiameter.api.Request;
/**
* This interface describe extends methods of base class Data: $Date: 2008/07/03 19:43:10 $ Revision: $Revision: 1.1 $
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.0.1
*/
@SuppressWarnings("all") //3rd party lib
public interface IRequest extends Request {
/**
* Set network request flag
*
* @param isNetwork true if this request is neteork
*/
void setNetworkRequest(boolean isNetwork);
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/ISession.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api;
import org.jdiameter.api.NetworkReqListener;
import org.jdiameter.api.Session;
/**
* This interface describe extends methods of base class Data: $Date: 2009/07/27 18:05:03 $ Revision: $Revision: 1.3 $
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.0.1
*/
@SuppressWarnings("all") //3rd party lib
public interface ISession extends Session {
NetworkReqListener getReqListener();
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/ISessionFactory.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api;
import org.jdiameter.api.ApplicationId;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.SessionFactory;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.common.api.app.IAppSessionFactory;
/**
* This interface describe extends methods of base class
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.0.1
*/
@SuppressWarnings("all") //3rd party lib
public interface ISessionFactory extends SessionFactory {
/**
* Method used for creating a new App Session using the specified class with the desired Application Id and Session
* Id.
*
* @param sessionId the session-id for this App Session, if desired
* @param applicationId the application id for this session
* @param aClass the class of the app session object
* @param args
*
* @return an AppSession instance
*
* @throws InternalException
*/
T getNewAppSession(String sessionId, ApplicationId applicationId, Class extends AppSession> aClass,
Object... args) throws InternalException;
/**
* Registers a new App Session factory.
*
* @param sessionClass the class of the objects being generated by the factory
* @param factory the factory to generate app sessions
*/
void registerAppFacory(Class extends AppSession> sessionClass, IAppSessionFactory factory);
/**
* Unregisters an existing App Session factory.
*
* @param sessionClass the class identifier for this factory
*/
void unRegisterAppFacory(Class extends AppSession> sessionClass);
/**
* Retrieves the app session factory associated with an app session class
*
* @param sessionClass the class identifier for the desired factory
*
* @return the App Session Factory instance if registered, null if no factory is registered for such class
*/
IAppSessionFactory getAppSessionFactory(Class extends AppSession> sessionClass);
/**
* @return
*/
IContainer getContainer();
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/StackState.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api;
/**
* This enumeration describe avaliable states of stack Data: $Date: 2008/07/03 19:43:10 $ Revision: $Revision: 1.1 $
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
* @version 1.5.0.1
*/
public enum StackState {
IDLE,
CONFIGURED,
STARTED,
STOPPED
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/annotation/IRecoder.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.annotation;
import org.jdiameter.api.Avp;
import org.jdiameter.api.Message;
import org.jdiameter.api.Request;
/**
* This interface provide methods for create diameter messages from your annotated domain object and create domain
* object from diameter message.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface IRecoder {
/**
* Create Request message from specified annotated domain object
*
* @param yourDomainMessageObject annotated domain object
* @param additionalAvp additional avp
*
* @return message instance
*
* @throws RecoderException throw if object can not be encoded to diameter message
*/
Message encodeToRequest(Object yourDomainMessageObject, Avp... additionalAvp) throws RecoderException;
/**
* Create Answer message from specified annotated domain object
*
* @param yourDomainMessageObject annotated domain object
* @param request request message
* @param resultCode result code of answer
*
* @return message answer instance
*
* @throws RecoderException throw if object can not be encoded to diameter message
*/
Message encodeToAnswer(Object yourDomainMessageObject, Request request, long resultCode) throws RecoderException;
/**
* Create specified domain object by message and class of object
*
* @param message diameter message
* @param yourDomainMessageObject class of domain object
*
* @return instance of domain object
*
* @throws RecoderException throw if message can not be decoded to domain object
*/
T decode(Message message, java.lang.Class yourDomainMessageObject) throws RecoderException;
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/annotation/RecoderException.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.annotation;
/**
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public class RecoderException extends RuntimeException {
private static final long serialVersionUID = 1L;
public RecoderException(Throwable cause) {
super(cause);
}
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/controller/IPeer.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.controller;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.Peer;
import org.jdiameter.api.app.StateChangeListener;
import org.jdiameter.client.api.IMessage;
import org.jdiameter.client.api.fsm.EventTypes;
import org.jdiameter.client.api.io.IConnectionListener;
import org.jdiameter.client.api.io.TransportException;
import org.jdiameter.common.api.statistic.IStatistic;
/**
* This interface provide additional methods for Peer interface
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface IPeer extends Peer {
/**
* Return rating of peer
*
* @return int value
*/
int getRating();
/**
* Return new hop by hop id for new message
*
* @return new hop by hop id
*/
long getHopByHopIdentifier();
/**
* Append request to peer request storage map
*
* @param message request instance
*/
void addMessage(IMessage message);
/**
* Remove request from request storage map
*
* @param message request instance
*/
void remMessage(IMessage message);
/**
* Clear request storage map
*/
IMessage[] remAllMessage();
/**
* Put message to peer fsm
*
* @param message request instance
*
* @return true if message will be set to FSM
*
* @throws TransportException
* @throws OverloadException
*/
boolean handleMessage(EventTypes type, IMessage message, String key)
throws TransportException, OverloadException, InternalException;
/**
* Send message to diameter network
*
* @param message request instance
*
* @return true if message will be set to FSM
*
* @throws TransportException
* @throws OverloadException
*/
boolean sendMessage(IMessage message) throws TransportException, OverloadException, InternalException;
/**
* Return true if peer has valid connection
*
* @return true if peer has valid connection
*/
boolean hasValidConnection();
/**
* Attach peer to realm
*
* @param realm realm name
*/
void setRealm(String realm);
/**
* Add state change listener
*
* @param listener listener instance
*/
void addStateChangeListener(StateChangeListener listener);
/**
* Remove state change listener
*
* @param listener listener instance
*/
void remStateChangeListener(StateChangeListener listener);
/**
* Add connection state change listener
*
* @param listener listener instance
*/
void addConnectionListener(IConnectionListener listener);
/**
* Remove connection state change listener
*
* @param listener listener instance
*/
void remConnectionListener(IConnectionListener listener);
/**
* Return peer statistic
*
* @return peer statistic
*/
IStatistic getStatistic();
/**
* Return if peer is connected
*
* @return is peer connected
*/
boolean isConnected();
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/controller/IPeerTable.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.controller;
import java.io.IOException;
import java.util.Map;
import org.jdiameter.api.AvpDataException;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.NetworkReqListener;
import org.jdiameter.api.PeerTable;
import org.jdiameter.api.RouteException;
import org.jdiameter.client.api.IAssembler;
import org.jdiameter.client.api.IMessage;
/**
* This interface provide additional methods for PeerTable interface
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface IPeerTable extends PeerTable {
/**
* Start peer manager ( start network activity )
*
* @throws IllegalDiameterStateException
* @throws IOException
*/
void start() throws IllegalDiameterStateException, IOException;
/**
* Run stopping procedure (unsynchronized)
*/
void stopping(int disconnectCause);
/**
* Release resources
*/
void stopped();
/**
* Destroy all resources
*/
void destroy();
/**
* Send message to diameter network ( routing procedure )
*
* @param message message instance
*
* @throws IllegalDiameterStateException
* @throws IOException
* @throws RouteException
* @throws AvpDataException
*/
void sendMessage(IMessage message) throws IllegalDiameterStateException, IOException, RouteException, AvpDataException;
/**
* Register session lister
*
* @param sessionId session id
* @param listener listener listener
*/
void addSessionReqListener(String sessionId, NetworkReqListener listener);
/**
* Return peer from peer table by identity - FQDN host name.
*
* @param fqdn peer host
*
* @return peer instance
*/
@Override
IPeer getPeer(String fqdn);
/**
* Return map of session event listeners
*
* @return map of session event listeners
*/
Map getSessionReqListeners();
/**
* Remove session event listener
*
* @param sessionId id of session
*/
void removeSessionListener(String sessionId);
/**
* Set instance assembler
*
* @param assembler assembler instance
*/
void setAssembler(IAssembler assembler);
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/controller/IRealm.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.controller;
import org.jdiameter.api.Realm;
import org.jdiameter.server.api.agent.IAgent;
import org.jdiameter.server.api.agent.IAgentConfiguration;
/**
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface IRealm extends Realm {
/**
* Return list of real peers
*
* @return array of realm peers
*/
String[] getPeerNames();
/**
* Append new host (peer) to this realm
*
* @param host name of peer host
*/
void addPeerName(String name);
/**
* Remove peer from this realm
*
* @param host name of peer host
*/
void removePeerName(String name);
/**
* Checks if a peer name belongs to this realm
*
* @param name name of peer host
*
* @return true if the the peer belongs to this realm, false otherwise
*/
boolean hasPeerName(String name);
/**
* Get the processing agent for this realm
*
* @return the agent for this realm, if any
*/
IAgent getAgent();
/**
* Get agent configuration values for this realm.
*
* @return
*/
IAgentConfiguration getAgentConfiguration();
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/controller/IRealmTable.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.controller;
import java.util.Collection;
import java.util.List;
import org.jdiameter.api.ApplicationId;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.LocalAction;
import org.jdiameter.api.Realm;
import org.jdiameter.api.RealmTable;
import org.jdiameter.client.api.IAnswer;
import org.jdiameter.client.api.IRequest;
import org.jdiameter.server.api.agent.IAgentConfiguration;
/**
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public interface IRealmTable extends RealmTable {
Realm matchRealm(IRequest request);
Realm matchRealm(IAnswer message, String destRealm);
Realm getRealm(String realmName, ApplicationId applicationId);
Realm removeRealmApplicationId(String realmName, ApplicationId appId);
Collection removeRealm(String realmName);
Collection getRealms(String realm);
Collection getRealms();
String getRealmForPeer(String fqdn);
void addLocalApplicationId(ApplicationId ap);
void removeLocalApplicationId(ApplicationId a);
void addLocalRealm(String localRealm, String fqdn);
/**
* Method which accepts IAgentConfiguration to avoid decode, encode, decode sequences
*
* @param name
* @param appId
* @param locAction
* @param agentConfImpl
* @param isDynamic
* @param expirationTime
* @param hosts
*
* @return
*
* @throws InternalException
*/
Realm addRealm(String name, ApplicationId appId, LocalAction locAction, IAgentConfiguration agentConfImpl,
boolean isDynamic, long expirationTime,
String[] hosts) throws InternalException;
List getAllRealmSet();
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/fsm/EventTypes.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.fsm;
/**
* This enumeration describe all fsm events
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
public enum EventTypes {
/**
* Connect event
*/
CONNECT_EVENT(true),
/**
* Disconnect event
*/
DISCONNECT_EVENT(true),
/**
* Operation timeout event
*/
TIMEOUT_EVENT(true),
/**
* Start fsm event
*/
START_EVENT(true),
/**
* Stop fsm event
*/
STOP_EVENT(true),
/**
* Internal error during processing event
*/
INTERNAL_ERROR(true),
/**
* Stack received CER message
*/
CER_EVENT,
/**
* Stack received CEA message
*/
CEA_EVENT,
/**
* Stack received DPR message
*/
DPR_EVENT,
/**
* Stack received DPA message
*/
DPA_EVENT,
/**
* Stack received DWR message
*/
DWR_EVENT,
/**
* Stack received DWA message
*/
DWA_EVENT,
/**
* App send message to network
*/
SEND_MSG_EVENT,
/**
* Stack received Application message
*/
RECEIVE_MSG_EVENT;
boolean highPriority;
EventTypes() {
highPriority = false;
}
EventTypes(boolean highPriority) {
this.highPriority = highPriority;
}
public boolean isHighPriority() {
return highPriority;
}
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/fsm/ExecutorFactory.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.fsm;
import java.util.concurrent.ExecutorService;
/**
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface ExecutorFactory {
ExecutorService getExecutor();
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/fsm/FsmEvent.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.fsm;
import org.jdiameter.api.app.StateEvent;
import org.jdiameter.client.api.IMessage;
/**
* This class extends behaviour of FSM StateEvent
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public class FsmEvent implements StateEvent {
private String key;
private EventTypes type;
private Object value;
private final long createdTime = System.currentTimeMillis();
/**
* Create instance of class
*
* @param type type of event
*/
public FsmEvent(EventTypes type) {
this.type = type;
}
/**
* Create instance of class with predefined parameters
*
* @param type type of event
* @param key event key
*/
public FsmEvent(EventTypes type, String key) {
this(type);
this.key = key;
}
/**
* Create instance of class with predefined parameters
*
* @param type type of event
* @param value attached message
*/
public FsmEvent(EventTypes type, IMessage value) {
this(type);
this.value = value;
}
/**
* Create instance of class with predefined parameters
*
* @param type type of event
* @param value attached message
* @param key event key
*/
public FsmEvent(EventTypes type, IMessage value, String key) {
this(type, value);
this.key = key;
}
/**
* Return key value
*
* @return key value
*/
public String getKey() {
return key;
}
/**
* Return attached message
*
* @return diameter message
*/
public IMessage getMessage() {
return (IMessage) getData();
}
/**
* Return created time
*
* @return created time
*/
public long getCreatedTime() {
return createdTime;
}
@Override
public E encodeType(Class eClass) {
return (E) type;
}
@Override
public Enum getType() {
return type;
}
@Override
public void setData(Object o) {
value = o;
}
@Override
public Object getData() {
return value;
}
@Override
public int compareTo(Object o) {
return 0;
}
/**
* Return string representation of instance
*
* @return string representation of instance
*/
@Override
public String toString() {
return "Event{name:" + type.name() + ", key:" + key + ", object:" + value + "}";
}
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/fsm/IContext.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.fsm;
import java.io.IOException;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.Message;
import org.jdiameter.api.OverloadException;
import org.jdiameter.client.api.IMessage;
import org.jdiameter.client.api.io.TransportException;
/**
* This interface describe operations of FSM context object
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface IContext {
/**
* Start connection procedure to remote peer
*
* @throws InternalException
* @throws IOException
* @throws org.jdiameter.api.IllegalDiameterStateException
*/
void connect() throws InternalException, IOException, IllegalDiameterStateException;
/**
* Start disconnect procedure from remote peer
*
* @throws InternalException
* @throws org.jdiameter.api.IllegalDiameterStateException
*/
void disconnect() throws InternalException, IllegalDiameterStateException;
/**
* This method allow sent message to remote peer
*
* @param message message which one should be sent to remote peer
*
* @throws TransportException
* @throws OverloadException
*/
boolean sendMessage(IMessage message) throws TransportException, OverloadException;
/**
* This method allow sent CER command to remote peer
*
* @throws TransportException
* @throws OverloadException
*/
void sendCerMessage() throws TransportException, OverloadException;
/**
* This method allow sent CEA command to remote peer
*
* @param resultCode value for result-code Avp
* @param errMessage value for error-message Avp
*
* @throws TransportException
* @throws OverloadException
*/
void sendCeaMessage(int resultCode, Message cer, String errMessage) throws TransportException, OverloadException;
/**
* This method allow sent DWR command to remote peer
*
* @throws TransportException
* @throws OverloadException
*/
void sendDwrMessage() throws TransportException, OverloadException;
/**
* This method allow sent DWA command to remote peer
*
* @param dwr parent DWR command receved from remote peer
* @param resultCode value for result-code avp
* @param errorMessage value for error-message avp
*
* @throws TransportException
* @throws OverloadException
*/
void sendDwaMessage(IMessage dwr, int resultCode, String errorMessage) throws TransportException, OverloadException;
/**
* This method allow sent DPR command to remote peer
*
* @param disconnectCause value for disconnect-cause avp
*
* @throws TransportException
* @throws OverloadException
*/
void sendDprMessage(int disconnectCause) throws TransportException, OverloadException;
/**
* This method allow sent DPA command to remote peer
*
* @param dpr parent DPR command receved from remote peer
* @param resultCode value for result-code avp
* @param errorMessage value for error-message avp
*
* @throws TransportException
* @throws OverloadException
*/
void sendDpaMessage(IMessage dpr, int resultCode, String errorMessage) throws TransportException, OverloadException;
/**
* This method allow processed message from to remote peer
*
* @param iMessage message from remote peer
*
* @return true if message correct processed
*/
boolean receiveMessage(IMessage iMessage);
/**
* This method call when peer instance receive DWR event
*
* @param iMessage message
*
* @return result code With this code stack will be send DWA message
*/
int processDwrMessage(IMessage iMessage);
/**
* This method call when peer instance receive DPR event
*
* @param iMessage message
*
* @return result code With this code stack will be send DPA message
*/
int processDprMessage(IMessage iMessage);
/**
* This method allow sent CEA command to remote peer
*
* @param key connection key (host + ":" + port)
* @param message
*
* @return true if the message is sent to remote peer
*/
boolean processCeaMessage(String key, IMessage message);
/**
* This method allow processed CER command from remote peer
*
* @param key connection key (host + ":" + port)
* @param message received from remote host
*
* @return result-code for CEA message or -1 if message can not be processed
*/
int processCerMessage(String key, IMessage message);
/**
* Return true if connection should be restored Look AttemptToConnect property of peer
*
* @return true if connection should be restored
*/
boolean isRestoreConnection();
/**
* Reeturn true if connection already created and connected
*
* @return true if connection already created and connected
*/
boolean isConnected();
/**
* Return parent peer description
*
* @return parent peer description
*/
String getPeerDescription();
/**
* Clears statistics for context
*/
void removeStatistics();
/**
* Creates statistics for context
*/
void createStatistics();
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/fsm/IFsmFactory.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.fsm;
import org.jdiameter.api.Configuration;
import org.jdiameter.api.InternalException;
import org.jdiameter.common.api.concurrent.IConcurrentFactory;
/**
* Peer FSM factory
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface IFsmFactory {
/**
* Create instance of Peer FSM
*
* @param context FSM context object
* @param concurrentFactory executor facility
* @param config configuration
*
* @return State machine instance
*
* @throws InternalException
*/
IStateMachine createInstanceFsm(IContext context, IConcurrentFactory concurrentFactory, Configuration config)
throws InternalException;
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/fsm/IStateMachine.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.fsm;
import org.jdiameter.api.app.StateChangeListener;
import org.jdiameter.api.app.StateMachine;
import org.jdiameter.common.api.statistic.IStatistic;
/**
* This interface extends StateMachine interface
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface IStateMachine extends StateMachine {
/**
* This method returns occupancy of event queue
*
* @return occupancy of event queue
*/
double getQueueInfo();
void remStateChangeNotification(StateChangeListener listener);
IStatistic getStatistic();
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/io/IConnection.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.io;
import java.io.IOException;
import java.net.InetAddress;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.Wrapper;
import org.jdiameter.client.api.IMessage;
/**
* A Connection with a remote host.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface IConnection extends Wrapper {
/**
* Return created time
*
* @return created time
*/
long getCreatedTime();
/**
* Return identifier of connection. For example: "[remote_host_name]:[remote_port]"
*
* @return identifier of connection.
*/
String getKey();
/**
* Connect with remote host
*
* @throws TransportException
*/
void connect() throws TransportException;
/**
* Disconnect wit remote host
*
* @throws InternalError
*/
void disconnect() throws InternalError;
/**
* Send message to remote host
*
* @param message diameter message
*
* @throws TransportException
* @throws OverloadException
*/
void sendMessage(IMessage message) throws TransportException, OverloadException;
/**
* Clear all attachec resources (close socket)
*
* @throws IOException
*/
void release() throws IOException;
/**
* Return true if connection is incomming
*
* @return true if connection is incomming
*/
boolean isNetworkInitiated();
/**
* Return true if is connection is valid
*
* @return true if is connection is valid
*/
boolean isConnected();
/**
* Return remote host address
*
* @return remote host address
*/
InetAddress getRemoteAddress();
/**
* Return remote socket port
*
* @return remote socket port
*/
int getRemotePort();
/**
* Append connection listener
*
* @param connectionListener listener instance
*/
void addConnectionListener(IConnectionListener connectionListener);
/**
* Remove all connection listeners
*/
void remAllConnectionListener();
/**
* Remove connection listener
*
* @param connectionListener listener instance
*/
void remConnectionListener(IConnectionListener connectionListener);
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/io/IConnectionListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.io;
import java.util.List;
import org.jdiameter.client.api.IMessage;
/**
*
* An object that registers to be notified of events generated by a
* IConnection object.
*
* The ConnectionListener interface is implemented by a PCB component.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface IConnectionListener {
/**
* Notifies that connection is created
*
* @param connKey identifier of created connection
*/
void connectionOpened(String connKey);
/**
* Notifies that connection is closed
*
* @param connKey identifier of closed connection
* @param notSended array of not sended messages
*/
void connectionClosed(String connKey, List notSended);
/**
* Notifies that connection is received incoming message
*
* @param connKey identifier of connection
* @param message received incoming message
*/
void messageReceived(String connKey, IMessage message);
/**
* Notifies that connection is generated excpetion
*
* @param connKey identifier of connection
* @param message the message from that failed
* @param cause generated exceptions
*/
void internalError(String connKey, IMessage message, TransportException cause);
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/io/ITransportLayerFactory.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.io;
import java.net.InetAddress;
import org.jdiameter.api.Wrapper;
import org.jdiameter.common.api.concurrent.IConcurrentFactory;
/**
* Factory of Network Layer elements. Configuration and message parser instances injection by constructor
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface ITransportLayerFactory extends Wrapper {
/**
* Create new IConnection instance with predefined parameters
*
* @param remoteAddress destination host address
* @param factory concurrent factory
* @param remotePort destination port address
* @param localAddress local network adapter address
* @param localPort local socket port
* @param ref reference to additional parameters
*
* @return IConnection instance
*
* @throws TransportException
*/
IConnection createConnection(InetAddress remoteAddress, IConcurrentFactory factory, int remotePort,
InetAddress localAddress, int localPort, String ref)
throws TransportException;
/**
* Create new IConnection instance with predefined parameters
*
* @param remoteAddress destination host address
* @param factory concurrent factory
* @param remotePort destination port address
* @param localAddress local network adapter address
* @param localPort local socket port
* @param listener connection listener instance
* @param ref reference to additional parameters
*
* @return IConnection instance
*
* @throws TransportException
*/
IConnection createConnection(InetAddress remoteAddress, IConcurrentFactory factory, int remotePort,
InetAddress localAddress, int localPort,
IConnectionListener listener, String ref) throws TransportException;
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/io/NotInitializedException.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.io;
/**
* Signals that an exception has occurred in a during start transport element. An NotInitializedException
* is thrown to indicate that transport element is not configured.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public class NotInitializedException extends Exception {
/**
* Create instance of class
*/
public NotInitializedException() {
super();
}
/**
* Create instance of class with predefined parameters
*
* @param message error message
*/
public NotInitializedException(String message) {
super(message);
}
/**
* Create instance of class with predefined parameters
*
* @param message error message
* @param cause error cause
*/
public NotInitializedException(String message, Throwable cause) {
super(message, cause);
}
/**
* Create instance of class with predefined parameters
*
* @param cause error cause
*/
public NotInitializedException(Throwable cause) {
super(cause);
}
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/io/TransportError.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.io;
/**
* This enumeration describe types on network errors These types help to more details define behaviour of high layers
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public enum TransportError {
/**
* Internal error (network layer exceptions)
*/
Internal,
/**
* Overload errors (overload netowrk queues)
*/
Overload,
/**
* Error during send message procedure (special type)
*/
FailedSendMessage,
/**
* Received broken message (special type)
*/
ReceivedBrokenMessage,
/**
* Network error (io exceptions)
*/
NetWorkError
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/io/TransportException.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.io;
/**
* Signals that an transport exception has occurred in a during initialize transport element.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public class TransportException extends Exception {
/**
* Error code
*/
TransportError code;
/**
* Create instance of class with predefined parameters
*
* @param message error message
* @param code error code
*/
public TransportException(String message, TransportError code) {
super(message);
this.code = code;
}
/**
* Create instance of class with predefined parameters
*
* @param message error message
* @param code error code
* @param cause error cause
*/
public TransportException(String message, TransportError code, Throwable cause) {
super(message, cause);
this.code = code;
}
/**
* Create instance of class with predefined parameters
*
* @param code error code
* @param cause error cause
*/
public TransportException(TransportError code, Throwable cause) {
super(cause);
this.code = code;
}
/**
* Return code of error
*
* @return code of error
*/
public TransportError getCode() {
return code;
}
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/parser/IElementParser.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.parser;
import java.net.InetAddress;
import java.util.Date;
import org.jdiameter.api.AvpDataException;
/**
* Basic interface for diameter basic elements parsers.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface IElementParser {
/**
* Convert byte array to int
*
* @param rawData byte representation of int value
*
* @return int value
*
* @throws AvpDataException
*/
int bytesToInt(byte[] rawData) throws AvpDataException;
/**
* Convert byte array to long
*
* @param rawData byte representation of long value
*
* @return long value
*
* @throws AvpDataException
*/
long bytesToLong(byte[] rawData) throws AvpDataException;
/**
* Convert byte array to float
*
* @param rawData byte representation of float value
*
* @return float value
*
* @throws AvpDataException
*/
float bytesToFloat(byte[] rawData) throws AvpDataException;
/**
* Convert byte array to double
*
* @param rawData byte representation of double value
*
* @return double value
*
* @throws AvpDataException
*/
double bytesToDouble(byte[] rawData) throws AvpDataException;
/**
* Convert byte array to octet string
*
* @param rawData byte representation of octet string value
*
* @return octet string value
*
* @throws AvpDataException
*/
String bytesToOctetString(byte[] rawData) throws AvpDataException;
/**
* Convert byte array to utf8 string
*
* @param rawData byte representation of utf8 string value
*
* @return utf8 string value
*
* @throws AvpDataException
*/
String bytesToUtf8String(byte[] rawData) throws AvpDataException;
/**
* Convert byte array to date
*
* @param rawData byte representation of date value
*
* @return date value
*
* @throws AvpDataException
*/
Date bytesToDate(byte[] rawData) throws AvpDataException;
/**
* Convert byte array to InetAddress
*
* @param rawData byte representation of InetAddress value
*
* @return InetAddress value
*
* @throws AvpDataException
*/
InetAddress bytesToAddress(byte[] rawData) throws AvpDataException;
/**
* Convert int to byte array representation
*
* @param value int value
*
* @return byte array
*/
byte[] int32ToBytes(int value);
/**
* Convert long to 4-byte array representation
*
* @param value long value
*
* @return byte array
*/
byte[] intU32ToBytes(long value);
/**
* Convert long to byte array representation
*
* @param value long value
*
* @return byte array
*/
byte[] int64ToBytes(long value);
/**
* Convert float to byte array representation
*
* @param value float value
*
* @return byte array
*/
byte[] float32ToBytes(float value);
/**
* Convert double to byte array representation
*
* @param value double value
*
* @return byte array
*/
byte[] float64ToBytes(double value);
/**
* Convert octet string to byte array representation
*
* @param value octet string value
*
* @return byte array
*
* @throws ParseException
*/
byte[] octetStringToBytes(String value) throws ParseException;
/**
* Convert utf8 string to byte array representation
*
* @param value utf8 string value
*
* @return byte array
*
* @throws ParseException
*/
byte[] utf8StringToBytes(String value) throws ParseException;
/**
* Convert InetAddress to byte array representation
*
* @param value InetAddress value
*
* @return byte array
*/
byte[] addressToBytes(InetAddress value);
/**
* Convert Date to byte array representation
*
* @param value Date value
*
* @return byte array
*/
byte[] dateToBytes(Date value);
/**
* Convert byte array to specefied object
*
* @param rawData byte representation of InetAddress value
* @param iface type of object
*
* @return object instance
*
* @throws AvpDataException
*/
T bytesToObject(java.lang.Class> iface, byte[] rawData) throws AvpDataException;
/**
* Convert specified object to byte array representation
*
* @param value object
*
* @return byte array
*
* @throws ParseException
*/
byte[] objectToBytes(Object value) throws ParseException;
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/parser/IMessageParser.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.parser;
import java.nio.ByteBuffer;
import org.jdiameter.api.AvpDataException;
import org.jdiameter.client.api.IMessage;
/**
* Basic interface for diameter message parsers.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface IMessageParser {
/**
* Create message from bytebuffer
*
* @param data message bytebuffer
*
* @return instance of message
*
* @throws AvpDataException
*/
IMessage createMessage(ByteBuffer data) throws AvpDataException;
/**
* Create message from byte array
*
* @param data message byte array
*
* @return instance of message
*
* @throws AvpDataException
*/
IMessage createMessage(byte[] message) throws AvpDataException;
/**
* Created specified type of message
*
* @param iface type of message
* @param data message bytebuffer
*
* @return instance of message
*
* @throws AvpDataException
*/
T createMessage(java.lang.Class> iface, ByteBuffer data) throws AvpDataException;
/**
* Created empty message
*
* @param commandCode message command code
* @param headerAppId header applicatio id
*
* @return instance of message
*/
IMessage createEmptyMessage(int commandCode, long headerAppId);
/**
* Created specified type of message
*
* @param iface type of message
* @param commandCode message command code
* @param headerAppId header applicatio id
*
* @return instance of message
*/
T createEmptyMessage(Class> iface, int commandCode, long headerAppId);
/**
* Created new message with copied of header of parent message
*
* @param parentMessage parent message
*
* @return instance of message
*/
IMessage createEmptyMessage(IMessage parentMessage);
/**
* Created new message with copied of header of parent message
*
* @param parentMessage parent message
* @param commandCode new command code value
*
* @return instance of message
*/
IMessage createEmptyMessage(IMessage parentMessage, int commandCode);
/**
* Created new message with copied of header of parent message
*
* @param iface type of message
* @param parentMessage parent message
*
* @return instance of message
*/
T createEmptyMessage(Class> iface, IMessage parentMessage);
/**
* Encode message to ByteBuffer
*
* @param message diameter message
*
* @return instance of message
*
* @throws ParseException
*/
ByteBuffer encodeMessage(IMessage message) throws ParseException;
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/parser/ParseException.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.parser;
/**
* Signals that an parser exception has occurred in a during decoding message
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public class ParseException extends Exception {
private static final long serialVersionUID = 1L;
/**
* Create instance of class
*/
public ParseException() {
}
/**
* Create instance of class with predefined parameters
*
* @param message error message
*/
public ParseException(String message) {
super(message);
}
/**
* Create instance of class with predefined parameters
*
* @param message error message
* @param cause error cause
*/
public ParseException(String message, Throwable cause) {
super(message, cause);
}
/**
* Create instance of class with predefined parameters
*
* @param cause error cause
*/
public ParseException(Throwable cause) {
super(cause);
}
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/api/router/IRouter.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.api.router;
import org.jdiameter.api.AvpDataException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.RouteException;
import org.jdiameter.client.api.IAnswer;
import org.jdiameter.client.api.IMessage;
import org.jdiameter.client.api.IRequest;
import org.jdiameter.client.api.controller.IPeer;
import org.jdiameter.client.api.controller.IPeerTable;
import org.jdiameter.client.api.controller.IRealmTable;
/**
* This class describe Router functionality
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface IRouter {
/**
* Return peer from inner peer table by predefined parameters. Fetches peer based on message content, that is HBH or
* realm/host avp contents. Takes into consideration ApplicationId present in message to pick correct realm
* definition from RealmTable. This method should be called after {@link #updateRoute}.
*
* @param message message with routed avps
* @param manager instance of peer manager
*
* @return peer instance
*
* @throws RouteException
* @throws AvpDataException
*/
IPeer getPeer(IMessage message, IPeerTable manager) throws RouteException, AvpDataException;
/**
* Return realm table
*
* @return object representing realm table
*/
IRealmTable getRealmTable();
/**
* Register route information by received request. This information will be used during answer routing.
*
* @param request request
*/
void registerRequestRouteInfo(IRequest request);
// PCB - Changed to use a better routing mechanism as hopbyhop was not always unique and the table could also grow too big
/**
* Return Request route info
*
* @param hopByHopIndentifier Hop-by-Hop Identifier
*
* @return Array (host and realm)
*/
String[] getRequestRouteInfo(IMessage message);
//PCB added
void garbageCollectRequestRouteInfo(IMessage message);
/**
* Start inner time facilities
*/
void start();
/**
* Stop inner time facilities
*/
void stop();
/**
* Release all resources
*/
void destroy();
/**
* Called when redirect answer is received for request. This method update redirect host information and routes to
* new destination.
*
* @param request
* @param answer
* @param table
*/
void processRedirectAnswer(IRequest request, IAnswer answer, IPeerTable table) throws InternalException, RouteException;
/**
* Based on Redirect entries or any other factors, this method changes route information.
*
* @param message
*
* @return
*
* @throws RouteException
* @throws AvpDataException
*/
boolean updateRoute(IRequest message) throws RouteException, AvpDataException;
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/impl/AbstractStateChangeListener.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.impl;
import org.jdiameter.api.app.StateChangeListener;
/**
* Implementation of state change methods. Developer can provide implementation of particular methods required.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public abstract class AbstractStateChangeListener implements StateChangeListener {
/*
* (non-Javadoc)
*
* @see org.jdiameter.api.app.StateChangeListener#stateChanged(java.lang.Enum, java.lang.Enum)
*/
@Override
@SuppressWarnings("unchecked")
public void stateChanged(Enum oldState, Enum newState) {
// Stub method
}
/*
* (non-Javadoc)
*
* @see org.jdiameter.api.app.StateChangeListener#stateChanged(java.lang.Object, java.lang.Enum, java.lang.Enum)
*/
@Override
@SuppressWarnings("unchecked")
public void stateChanged(T source, Enum oldState, Enum newState) {
// Stub method
}
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/impl/BaseSessionImpl.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.impl;
import static org.jdiameter.client.impl.helpers.Parameters.MessageTimeOut;
import static org.jdiameter.client.impl.helpers.Parameters.SessionTimeOut;
import java.io.Serializable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import org.jdiameter.api.*;
import org.jdiameter.client.api.IAssembler;
import org.jdiameter.client.api.IContainer;
import org.jdiameter.client.api.IEventListener;
import org.jdiameter.client.api.IMessage;
import org.jdiameter.client.api.parser.IMessageParser;
import org.jdiameter.common.api.timer.ITimerFacility;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Implementation for {@link BaseSession}.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public abstract class BaseSessionImpl implements BaseSession {
private static final Logger logger = LoggerFactory.getLogger(BaseSessionImpl.class);
protected final long creationTime = System.currentTimeMillis();
protected long lastAccessedTime = creationTime;
protected boolean isValid = true;
protected String sessionId;
protected long maxIdleTime = 0;
protected transient IContainer container;
protected transient IMessageParser parser;
protected NetworkReqListener reqListener;
protected Serializable istTimerId;
@Override
public long getCreationTime() {
return creationTime;
}
@Override
public long getLastAccessedTime() {
return lastAccessedTime;
}
protected long setLastAccessTime() {
lastAccessedTime = System.currentTimeMillis();
if (sessionId != null) {
maxIdleTime = container.getConfiguration().getLongValue(SessionTimeOut.ordinal(), (Long) SessionTimeOut.defValue());
if (maxIdleTime > 0) {
IAssembler assembler = container.getAssemblerFacility();
ITimerFacility timerFacility = assembler.getComponentInstance(ITimerFacility.class);
if (istTimerId != null) {
timerFacility.cancel(istTimerId);
}
istTimerId = timerFacility.schedule(this.getSessionId(), IDLE_SESSION_TIMER_NAME, maxIdleTime);
}
}
return lastAccessedTime;
}
public void onTimer(String timerName) {
if (timerName.equals(IDLE_SESSION_TIMER_NAME)) {
if (!isValid() || (maxIdleTime > 0 && System.currentTimeMillis() - getLastAccessedTime() >= maxIdleTime)) {
logger.debug("Terminating idle/invalid application session [{}] with SID[{}]", this, getSessionId());
this.release();
}
}
}
@Override
public boolean isValid() {
return isValid;
}
@Override
public String getSessionId() {
return sessionId;
}
/*
* (non-Javadoc)
*
* @see org.jdiameter.api.BaseSession#isAppSession()
*/
@Override
public boolean isAppSession() {
return false;
}
/*
* (non-Javadoc)
*
* @see org.jdiameter.api.BaseSession#isReplicable()
*/
@Override
public boolean isReplicable() {
return false;
}
protected void genericSend(Message message, EventListener listener)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
if (isValid) {
long timeOut = container.getConfiguration().getLongValue(MessageTimeOut.ordinal(),
(Long) MessageTimeOut.defValue());
genericSend(message, listener, timeOut, TimeUnit.MILLISECONDS);
} else {
throw new IllegalDiameterStateException("Session already released");
}
}
protected void genericSend(Message aMessage, EventListener listener, long timeout, TimeUnit timeUnit)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
if (isValid) {
setLastAccessTime();
IMessage message = (IMessage) aMessage;
IEventListener localListener = createListenerWrapper(listener);
if (message.isRequest()) {
message.setListener(localListener);
// Auto set system avps
if (message.getAvps().getAvpByIndex(0).getCode() != Avp.SESSION_ID && sessionId != null) {
// Just to make sure it doesn't get duplicated
message.getAvps().removeAvp(Avp.SESSION_ID);
message.getAvps().insertAvp(0, Avp.SESSION_ID, sessionId, true, false, false);
}
}
//Add Origin-Host/Realm AVPs if not present
MessageUtility.addOriginAvps(aMessage, container.getMetaData());
if (message.getState() != IMessage.STATE_NOT_SENT && message.getState() != IMessage.STATE_ANSWERED) {
throw new IllegalDiameterStateException("Illegal state");
}
message.createTimer(container.getScheduledFacility(), timeout, timeUnit);
try {
container.sendMessage(message);
} catch (RouteException e) {
message.clearTimer();
throw e;
} catch (Exception e) {
message.clearTimer();
throw new InternalException(e);
}
} else {
throw new IllegalDiameterStateException("Session already released");
}
}
@SuppressWarnings("unchecked")
protected IEventListener createListenerWrapper(final EventListener listener) {
return listener == null ? null : new MyEventListener(this, listener);
}
public Future send(final Message message)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
MyFuture future = new MyFuture();
future.send(message);
return future;
}
public Future send(Message message, long timeOut, TimeUnit timeUnit)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
MyFuture future = new MyFuture();
future.send(message, timeOut, timeUnit);
return future;
}
private class MyFuture implements Future {
private boolean canceled;
private boolean done;
private boolean timeOut;
private Lock lock = new ReentrantLock();
private CountDownLatch block = new CountDownLatch(1);
private Message result;
@Override
public boolean cancel(boolean mayInterruptIfRunning) {
lock.lock();
try {
canceled = true;
done = false;
block.countDown();
} finally {
lock.unlock();
}
return true;
}
@Override
public boolean isCancelled() {
return canceled;
}
@Override
public boolean isDone() {
return done;
}
@Override
public Message get() throws InterruptedException, ExecutionException {
try {
block.await();
} catch (Exception e) {
throw new ExecutionException(e);
}
Message rc = canceled ? null : result;
result = null;
return rc;
}
@Override
public Message get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
try {
block.await(timeout, unit);
} catch (Exception e) {
throw new ExecutionException(e);
}
if (timeOut) {
throw new TimeoutException();
}
Message rc = canceled ? null : result;
result = null;
return rc;
}
private IEventListener createListener() {
return new IEventListener() {
@Override
public void setValid(boolean value) {
}
@Override
public boolean isValid() {
return !canceled;
}
@Override
public void receivedSuccessMessage(Request r, Answer a) {
lock.lock();
try {
if (!canceled) {
result = a;
canceled = false;
done = true;
}
block.countDown();
} finally {
lock.unlock();
}
}
@Override
public void timeoutExpired(Request message) {
lock.lock();
try {
if (!canceled) {
done = true;
timeOut = true;
}
block.countDown();
} finally {
lock.unlock();
}
}
};
}
public void send(Message message)
throws RouteException, OverloadException, IllegalDiameterStateException, InternalException {
genericSend(message, createListener());
}
public void send(Message message, long timeOut, TimeUnit timeUnit)
throws RouteException, OverloadException, IllegalDiameterStateException, InternalException {
genericSend(message, createListener(), timeOut, timeUnit);
}
}
/**
* Appends an *-Application-Id AVP to the message, if none is present already.
*
* @param appId the application-id value
* @param m the message to append the *-Application-Id
*/
protected void appendAppId(ApplicationId appId, Message m) {
if (appId == null) {
return;
}
// check if any application-id avp is already present.
// we could use m.getApplicationIdAvps().size() > 0 but this should spare a few cpu cycles
for (Avp avp : m.getAvps()) {
int code = avp.getCode();
if (code == Avp.ACCT_APPLICATION_ID || code == Avp.AUTH_APPLICATION_ID
|| code == Avp.VENDOR_SPECIFIC_APPLICATION_ID) {
return;
}
}
if (appId.getVendorId() == 0) {
if (appId.getAcctAppId() != 0) {
m.getAvps().addAvp(Avp.ACCT_APPLICATION_ID, appId.getAcctAppId(), true, false, true);
}
if (appId.getAuthAppId() != 0) {
m.getAvps().addAvp(Avp.AUTH_APPLICATION_ID, appId.getAuthAppId(), true, false, true);
}
} else {
AvpSet avp = m.getAvps().addGroupedAvp(Avp.VENDOR_SPECIFIC_APPLICATION_ID, true, false);
avp.addAvp(Avp.VENDOR_ID, appId.getVendorId(), true, false, true);
if (appId.getAuthAppId() != 0) {
avp.addAvp(Avp.AUTH_APPLICATION_ID, appId.getAuthAppId(), true, false, true);
}
if (appId.getAcctAppId() != 0) {
avp.addAvp(Avp.ACCT_APPLICATION_ID, appId.getAcctAppId(), true, false, true);
}
}
}
protected long getAppId(ApplicationId appId) {
if (appId == null) {
return 0;
}
// if (appId.getVendorId() == 0) {
if (appId.getAcctAppId() != 0) {
return appId.getAcctAppId();
}
if (appId.getAuthAppId() != 0) {
return appId.getAuthAppId();
}
// }
return appId.getVendorId();
}
}
@SuppressWarnings("all") //3rd party lib
class MyEventListener implements IEventListener {
BaseSessionImpl session;
EventListener listener;
boolean isValid = true;
MyEventListener(BaseSessionImpl session, EventListener listener) {
this.session = session;
this.listener = listener;
}
@Override
public void setValid(boolean value) {
isValid = value;
if (!isValid) {
session = null;
listener = null;
}
}
@Override
public boolean isValid() {
return isValid;
}
@Override
@SuppressWarnings("unchecked")
public void receivedSuccessMessage(Request request, Answer answer) {
if (isValid) {
session.setLastAccessTime();
listener.receivedSuccessMessage(request, answer);
}
}
@Override
@SuppressWarnings("unchecked")
public void timeoutExpired(Request message) {
if (isValid) {
session.setLastAccessTime();
listener.timeoutExpired(message);
}
}
@Override
public int hashCode() {
return listener == null ? 0 : listener.hashCode();
}
@Override
public boolean equals(Object obj) {
return listener != null && listener.equals(obj);
}
@Override
public String toString() {
return listener == null ? "null" : listener.toString();
}
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/impl/DictionarySingleton.java
================================================
/*
* JBoss, Home of Professional Open Source
* Copyright 2010, 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.jdiameter.client.impl;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.validation.Dictionary;
import org.jdiameter.api.validation.ValidatorLevel;
import org.jdiameter.common.impl.validation.DictionaryImpl;
import java.io.InputStream;
/**
* Util class. Makes it easier to access Dictionary instance as singleton.
*
* @author Bartosz Baranowski
* @author Alexandre Mendonca
* @since 1.5.4.0-build404
*/
@SuppressWarnings("all") //3rd party lib
public class DictionarySingleton
{
private DictionarySingleton()
{
// defeat instantiation
}
public static Dictionary getDictionary()
{
return DictionaryImpl.getInstance((String) null);
}
public static Dictionary getDictionary(String confFile)
{
return DictionaryImpl.getInstance(confFile);
}
public static Dictionary getDictionary(InputStream is)
{
return DictionaryImpl.getInstance(is);
}
static void init(String clazz, boolean validatorEnabled, ValidatorLevel validatorSendLevel,
ValidatorLevel validatorReceiveLevel) throws InternalException
{
try {
Class.forName(clazz).getMethod("getInstance", String.class).invoke(null, new Object[]{null});
DictionaryImpl.INSTANCE.setEnabled(validatorEnabled);
DictionaryImpl.INSTANCE.setSendLevel(validatorSendLevel);
DictionaryImpl.INSTANCE.setReceiveLevel(validatorReceiveLevel);
}
catch (Exception e) {
throw new InternalException(e);
}
}
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/impl/MessageUtility.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.impl;
import org.jdiameter.api.Avp;
import org.jdiameter.api.AvpSet;
import org.jdiameter.api.Message;
import org.jdiameter.api.MetaData;
/**
* Small util class to separate AVP manipulation code from MessageParser class.
*
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public class MessageUtility {
private MessageUtility() {
}
/**
* Used to set origin, previously done in MessageParser.
*
* @param m
* @param md
*/
public static void addOriginAvps(Message m, MetaData md) {
// FIXME: check for "userFqnAsUri" ?
AvpSet set = m.getAvps();
if (set.getAvp(Avp.ORIGIN_HOST) == null) {
m.getAvps().addAvp(Avp.ORIGIN_HOST, md.getLocalPeer().getUri().getFQDN(), true, false, true);
}
if (set.getAvp(Avp.ORIGIN_REALM) == null) {
m.getAvps().addAvp(Avp.ORIGIN_REALM, md.getLocalPeer().getRealmName(), true, false, true);
}
}
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/impl/MetaDataImpl.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.impl;
import static org.jdiameter.client.impl.helpers.Parameters.*;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryPoolMXBean;
import java.lang.management.MemoryType;
import java.lang.management.MemoryUsage;
import java.net.InetAddress;
import java.net.URISyntaxException;
import java.net.UnknownHostException;
import java.net.UnknownServiceException;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong;
import org.jdiameter.api.ApplicationId;
import org.jdiameter.api.Configuration;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.Peer;
import org.jdiameter.api.PeerState;
import org.jdiameter.api.PeerStateListener;
import org.jdiameter.api.StackType;
import org.jdiameter.api.URI;
import org.jdiameter.api.app.StateChangeListener;
import org.jdiameter.client.api.IContainer;
import org.jdiameter.client.api.IMessage;
import org.jdiameter.client.api.IMetaData;
import org.jdiameter.client.api.controller.IPeer;
import org.jdiameter.client.api.fsm.EventTypes;
import org.jdiameter.client.api.io.IConnectionListener;
import org.jdiameter.client.api.io.TransportException;
import org.jdiameter.client.impl.helpers.IPConverter;
import org.jdiameter.common.api.data.ISessionDatasource;
import org.jdiameter.common.api.statistic.IStatistic;
import org.jdiameter.common.api.statistic.IStatisticManager;
import org.jdiameter.common.api.statistic.IStatisticRecord;
import org.jdiameter.common.impl.controller.AbstractPeer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Use stack extension point
*
* @author erick.svenson@yahoo.com
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public class MetaDataImpl implements IMetaData {
private static final Logger logger = LoggerFactory.getLogger(MetaDataImpl.class);
protected List beans = ManagementFactory.getMemoryPoolMXBeans();
protected IContainer stack;
protected long state;
protected IPeer peer;
protected Set appIds = new LinkedHashSet();
protected final ISessionDatasource sessionDataSource;
public MetaDataImpl(IContainer s) {
this.stack = s;
this.sessionDataSource = s.getAssemblerFacility().getComponentInstance(ISessionDatasource.class);
}
public MetaDataImpl(IContainer s, IStatisticManager statisticFactory) {
this(s);
this.peer = newLocalPeer(statisticFactory);
IStatisticRecord heapMemory = statisticFactory.newCounterRecord(IStatisticRecord.Counters.HeapMemory,
new IStatisticRecord.LongValueHolder() {
@Override
public long getValueAsLong() {
for (MemoryPoolMXBean bean : beans) {
MemoryType memoryType = bean.getType();
MemoryUsage memoryUsage = bean.getUsage();
if (memoryType == MemoryType.HEAP) {
return memoryUsage.getUsed();
}
}
return 0;
}
@Override
public String getValueAsString() {
return String.valueOf(getValueAsLong());
}
});
IStatisticRecord noHeapMemory = statisticFactory.newCounterRecord(IStatisticRecord.Counters.NoHeapMemory,
new IStatisticRecord.LongValueHolder() {
@Override
public long getValueAsLong() {
for (MemoryPoolMXBean bean : beans) {
MemoryType memoryType = bean.getType();
MemoryUsage memoryUsage = bean.getUsage();
if (memoryType != MemoryType.HEAP) {
return memoryUsage.getUsed();
}
}
return 0;
}
@Override
public String getValueAsString() {
return String.valueOf(getValueAsLong());
}
});
peer.getStatistic().appendCounter(heapMemory, noHeapMemory);
}
protected IPeer newLocalPeer(IStatisticManager statisticFactory) {
return new ClientLocalPeer(statisticFactory);
}
@Override
public Peer getLocalPeer() {
return peer;
}
@Override
public int getMajorVersion() {
return 2;
}
@Override
public int getMinorVersion() {
return 1;
}
@Override
public StackType getStackType() {
return StackType.TYPE_CLIENT;
}
@Override
public Configuration getConfiguration() {
return stack.getConfiguration();
}
@Override
public void updateLocalHostStateId() {
state = System.currentTimeMillis();
}
@Override
public long getLocalHostStateId() {
return state;
}
@Override
public boolean isWrapperFor(Class> aClass) throws InternalException {
return aClass == IMetaData.class;
}
@Override
@SuppressWarnings("unchecked")
public T unwrap(Class aClass) throws InternalException {
if (aClass == IMetaData.class) {
return (T) this;
}
return null;
}
protected class ClientLocalPeer extends AbstractPeer implements IPeer {
protected AtomicLong hopByHopId = new AtomicLong(0);
protected InetAddress[] addresses = new InetAddress[0];
public void resetAddresses() {
addresses = new InetAddress[0];
}
@Override
public void connect() throws IllegalDiameterStateException {
throw new IllegalDiameterStateException("Illegal operation");
}
@Override
public void disconnect(int disconnectCause) throws IllegalDiameterStateException {
throw new IllegalDiameterStateException("Illegal operation");
}
public ClientLocalPeer(IStatisticManager statisticFactory) {
//FIXME: remove NULL?
super(null, statisticFactory);
createPeerStatistics();
}
@Override
@SuppressWarnings("unchecked")
public E getState(Class anEnum) {
switch (stack.getState()) {
case IDLE:
return (E) PeerState.DOWN;
case CONFIGURED:
return (E) PeerState.INITIAL;
case STARTED:
return (E) PeerState.OKAY;
case STOPPED:
return (E) PeerState.SUSPECT;
}
return (E) PeerState.DOWN;
}
@Override
public URI getUri() {
try {
return new URI(
stack.getConfiguration().getStringValue(OwnDiameterURI.ordinal(), (String) OwnDiameterURI.defValue()));
} catch (URISyntaxException e) {
throw new IllegalArgumentException(e);
} catch (UnknownServiceException e) {
throw new IllegalArgumentException(e);
}
}
@Override
public String getRealmName() {
return stack.getConfiguration().getStringValue(OwnRealm.ordinal(), (String) OwnRealm.defValue());
}
@Override
public long getVendorId() {
return stack.getConfiguration().getLongValue(OwnVendorID.ordinal(), (Long) OwnVendorID.defValue());
}
@Override
public String getProductName() {
return stack.getConfiguration().getStringValue(OwnProductName.ordinal(), (String) OwnProductName.defValue());
}
@Override
public long getFirmware() {
return stack.getConfiguration().getLongValue(OwnFirmwareRevision.ordinal(), -1L);
}
@Override
public Set getCommonApplications() {
if (logger.isDebugEnabled()) {
logger.debug("In getCommonApplications appIds size is [{}]", appIds.size());
}
if (appIds.isEmpty()) {
Configuration[] apps = stack.getConfiguration().getChildren(ApplicationId.ordinal());
if (apps != null) {
if (logger.isDebugEnabled()) {
logger.debug("Stack configuration has apps list size of [{}]. Looping through them", apps.length);
}
for (Configuration a : apps) {
long vnd = a.getLongValue(VendorId.ordinal(), 0L);
long auth = a.getLongValue(AuthApplId.ordinal(), 0L);
long acc = a.getLongValue(AcctApplId.ordinal(), 0L);
if (logger.isDebugEnabled()) {
logger.debug("Adding app id vendor [{}] auth [{}] acc [{}]", new Object[] { vnd, auth, acc });
}
if (auth != 0) {
appIds.add(org.jdiameter.api.ApplicationId.createByAuthAppId(vnd, auth));
}
if (acc != 0) {
appIds.add(org.jdiameter.api.ApplicationId.createByAccAppId(vnd, acc));
}
}
} else {
logger.debug("Apps is null - we have no apps in the stack configuration.");
}
}
return appIds;
}
@Override
public InetAddress[] getIPAddresses() {
if (addresses.length == 0) {
String address = stack.getConfiguration().getStringValue(OwnIPAddress.ordinal(), null);
if (address == null || address.length() == 0) {
try {
addresses = new InetAddress[] { InetAddress.getByName(getUri().getFQDN()) };
} catch (UnknownHostException e) {
logger.debug("Can not get IP by URI {}", e);
try {
addresses = new InetAddress[] { InetAddress.getLocalHost() };
} catch (UnknownHostException e1) {
addresses = new InetAddress[0];
}
}
} else {
InetAddress ia = IPConverter.InetAddressByIPv4(address);
if (ia == null) {
ia = IPConverter.InetAddressByIPv6(address);
}
if (ia == null) {
try {
addresses = new InetAddress[] { InetAddress.getLocalHost() };
} catch (UnknownHostException e) {
addresses = new InetAddress[0];
}
} else {
addresses = new InetAddress[] { ia };
}
}
}
return addresses;
}
@Override
public IStatistic getStatistic() {
return statistic;
}
@Override
public String toString() {
return "Peer{" +
"\n\tUri=" + getUri() + "; RealmName=" + getRealmName() + "; VendorId=" + getVendorId() +
";\n\tProductName=" + getProductName() + "; FirmWare=" + getFirmware() +
";\n\tAppIds=" + getCommonApplications() +
";\n\tIPAddresses=" + Arrays.asList(getIPAddresses()).toString() + ";" + "\n}";
}
@Override
public int getRating() {
return 0;
}
@Override
public void addPeerStateListener(PeerStateListener peerStateListener) {
}
@Override
public void removePeerStateListener(PeerStateListener peerStateListener) {
}
@Override
public long getHopByHopIdentifier() {
return hopByHopId.incrementAndGet();
}
@Override
public void addMessage(IMessage message) {
}
@Override
public void remMessage(IMessage message) {
}
@Override
public IMessage[] remAllMessage() {
return new IMessage[0];
}
@Override
public boolean handleMessage(EventTypes type, IMessage message, String key)
throws TransportException, OverloadException, InternalException {
return false;
}
@Override
public boolean sendMessage(IMessage message) throws TransportException, OverloadException {
return false;
}
@Override
public boolean hasValidConnection() {
return false;
}
@Override
public void setRealm(String realm) {
}
@Override
public void addStateChangeListener(StateChangeListener listener) {
}
@Override
public void remStateChangeListener(StateChangeListener listener) {
}
@Override
public void addConnectionListener(IConnectionListener listener) {
}
@Override
public void remConnectionListener(IConnectionListener listener) {
}
/*
* (non-Javadoc)
*
* @see org.jdiameter.client.api.controller.IPeer#isConnected()
*/
@Override
public boolean isConnected() {
return true; // it's own peer
}
}
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/impl/RawSessionImpl.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.impl;
import java.util.concurrent.TimeUnit;
import org.jdiameter.api.ApplicationId;
import org.jdiameter.api.Avp;
import org.jdiameter.api.EventListener;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.Message;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RawSession;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.Session;
import org.jdiameter.client.api.IContainer;
import org.jdiameter.client.api.IMessage;
import org.jdiameter.client.api.parser.IMessageParser;
/**
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public class RawSessionImpl extends BaseSessionImpl implements RawSession {
RawSessionImpl(IContainer stack) {
container = stack;
this.parser = container.getAssemblerFacility().getComponentInstance(IMessageParser.class);
}
@Override
public Message createMessage(int commandCode, ApplicationId appId, Avp... avps) {
if (isValid) {
setLastAccessTime();
IMessage m = parser.createEmptyMessage(commandCode, getAppId(appId));
m.getAvps().addAvp(avps);
appendAppId(appId, m);
return m;
} else {
throw new IllegalStateException("Session already released");
}
}
@Override
public Message createMessage(int commandCode, ApplicationId appId, long hopByHopIdentifier, long endToEndIdentifier,
Avp... avps) {
if (isValid) {
setLastAccessTime();
IMessage m = parser.createEmptyMessage(commandCode, getAppId(appId));
if (hopByHopIdentifier >= 0) {
m.setHopByHopIdentifier(-hopByHopIdentifier);
}
if (endToEndIdentifier >= 0) {
m.setEndToEndIdentifier(endToEndIdentifier);
}
m.getAvps().addAvp(avps);
appendAppId(appId, m);
return m;
} else {
throw new IllegalStateException("Session already released");
}
}
@Override
public Message createMessage(Message message, boolean copyAvps) {
if (isValid) {
setLastAccessTime();
IMessage newMessage = null;
IMessage inner = (IMessage) message;
if (copyAvps) {
newMessage = parser.createEmptyMessage(inner);
MessageUtility.addOriginAvps(newMessage, container.getMetaData());
} else {
newMessage = (IMessage) createMessage(
inner.getCommandCode(),
inner.getSingleApplicationId(),
-1,
-1);
}
newMessage.setRequest(message.isRequest());
newMessage.setProxiable(message.isProxiable());
newMessage.setError(message.isError());
newMessage.setReTransmitted(message.isReTransmitted());
return newMessage;
} else {
throw new IllegalStateException("Session already released");
}
}
@Override
public void send(Message message, EventListener listener)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
genericSend(message, listener);
}
@Override
public void send(Message message, EventListener listener, long timeOut, TimeUnit timeUnit)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
genericSend(message, listener, timeOut, timeUnit);
}
@Override
public void release() {
isValid = false;
container = null;
parser = null;
}
@Override
public boolean isWrapperFor(Class> iface) throws InternalException {
return iface == Session.class;
}
@Override
public T unwrap(Class iface) throws InternalException {
return (T) (iface == Session.class ? new SessionImpl(container) : null);
}
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/impl/SessionFactoryImpl.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.impl;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.jdiameter.api.ApplicationId;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.RawSession;
import org.jdiameter.api.Session;
import org.jdiameter.api.app.AppSession;
import org.jdiameter.client.api.IContainer;
import org.jdiameter.client.api.ISessionFactory;
import org.jdiameter.client.api.StackState;
import org.jdiameter.client.impl.helpers.UIDGenerator;
import org.jdiameter.common.api.app.IAppSessionFactory;
import org.jdiameter.common.api.data.ISessionDatasource;
/**
* Implementation for {@link ISessionFactory}
*
* @author erick.svenson@yahoo.com
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public class SessionFactoryImpl implements ISessionFactory {
private IContainer stack;
@SuppressWarnings("rawtypes")
private Map appFactories = new ConcurrentHashMap();
private ISessionDatasource dataSource;
protected static UIDGenerator uid = new UIDGenerator();
public SessionFactoryImpl(IContainer stack) {
this.stack = stack;
this.dataSource = this.stack.getAssemblerFacility().getComponentInstance(ISessionDatasource.class);
}
@Override
public String getSessionId(String custom) {
long id = uid.nextLong();
long high32 = (id & 0xffffffff00000000L) >> 32;
long low32 = (id & 0xffffffffL);
StringBuilder sb = new StringBuilder();
sb.append(stack.getMetaData().getLocalPeer().getUri().getFQDN()).append(";").append(high32).append(";").append(low32);
if (custom != null) {
//FIXME: add checks for not allowed chars?
sb.append(";").append(custom);
}
return sb.toString();
}
@Override
public String getSessionId() {
return this.getSessionId(null);
}
@Override
public RawSession getNewRawSession() throws InternalException {
if (stack.getState() == StackState.IDLE) {
throw new InternalException("Illegal state of stack");
}
return new RawSessionImpl(stack);
}
@Override
public Session getNewSession() throws InternalException {
if (stack.getState() == StackState.IDLE) {
throw new InternalException("Illegal state of stack");
}
// FIXME: store this! Properly handle in ISessiondata
SessionImpl session = new SessionImpl(stack);
this.dataSource.addSession(session);
return session;
}
@Override
public Session getNewSession(String sessionId) throws InternalException {
if (stack.getState() == StackState.IDLE) {
throw new InternalException("Illegal state of stack");
}
SessionImpl session = new SessionImpl(stack);
if (sessionId != null && sessionId.length() > 0) {
session.sessionId = sessionId;
}
// FIXME: store this! Properly handle in ISessiondata
this.dataSource.addSession(session);
return session;
}
@Override
@SuppressWarnings("unchecked")
public T getNewAppSession(ApplicationId applicationId, Class extends AppSession> aClass)
throws InternalException {
return (T) getNewAppSession(null, applicationId, aClass, new Object[0]);
}
@Override
@SuppressWarnings("unchecked")
public T getNewAppSession(String sessionId, ApplicationId applicationId,
Class extends AppSession> aClass) throws InternalException {
return (T) getNewAppSession(sessionId, applicationId, aClass, new Object[0]);
}
@Override
@SuppressWarnings("unchecked")
public T getNewAppSession(String sessionId, ApplicationId applicationId,
Class extends AppSession> aClass, Object... args)
throws InternalException {
T session = null;
if (stack.getState() == StackState.IDLE) {
throw new InternalException("Illegal state of stack");
}
if (appFactories.containsKey(aClass)) {
session = (T) appFactories.get(aClass).getNewSession(sessionId, aClass, applicationId, args);
// FIXME: add check if it exists already!
//dataSource.addSession(session);
}
return session;
}
@Override
public void registerAppFacory(Class extends AppSession> sessionClass, IAppSessionFactory factory) {
appFactories.put(sessionClass, factory);
}
@Override
public void unRegisterAppFacory(Class extends AppSession> sessionClass) {
appFactories.remove(sessionClass);
}
/*
* (non-Javadoc)
*
* @see org.jdiameter.client.api.ISessionFactory#getAppSessionFactory(java.lang.Class)
*/
@Override
public IAppSessionFactory getAppSessionFactory(Class extends AppSession> sessionClass) {
return appFactories.get(sessionClass);
}
@Override
public IContainer getContainer() {
return stack;
}
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/impl/SessionImpl.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.impl;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
import org.jdiameter.api.Answer;
import org.jdiameter.api.ApplicationId;
import org.jdiameter.api.Avp;
import org.jdiameter.api.EventListener;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.Message;
import org.jdiameter.api.NetworkReqListener;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.RawSession;
import org.jdiameter.api.Request;
import org.jdiameter.api.RouteException;
import org.jdiameter.client.api.IContainer;
import org.jdiameter.client.api.IMessage;
import org.jdiameter.client.api.IRequest;
import org.jdiameter.client.api.ISession;
import org.jdiameter.client.api.parser.IMessageParser;
import org.jdiameter.common.api.data.ISessionDatasource;
import org.jdiameter.common.api.timer.ITimerFacility;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Implementation for {@link ISession}
*
* @author erick.svenson@yahoo.com
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public class SessionImpl extends BaseSessionImpl implements ISession {
private static final Logger logger = LoggerFactory.getLogger(SessionImpl.class);
private Semaphore lock = new Semaphore(1); // container lock
SessionImpl(IContainer container) {
setContainer(container);
try {
sessionId = container.getSessionFactory().getSessionId();
} catch (IllegalDiameterStateException idse) {
throw new IllegalStateException("Unable to generate Session-Id", idse);
}
}
void setContainer(IContainer container) {
try {
lock.acquire(); // allow container change only if not releasing
this.container = container;
this.parser = (IMessageParser) container.getAssemblerFacility().getComponentInstance(IMessageParser.class);
} catch (InterruptedException e) {
logger.error("failure getting lock", e);
} finally {
lock.release();
}
}
@Override
public void send(Message message, EventListener listener)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
genericSend(message, listener);
}
@Override
public void send(Message message, EventListener listener, long timeout, TimeUnit timeUnit)
throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
genericSend(message, listener, timeout, timeUnit);
}
@Override
public void setRequestListener(NetworkReqListener listener) {
if (listener != null) {
super.reqListener = listener;
container.addSessionListener(sessionId, listener);
}
}
@Override
public NetworkReqListener getReqListener() {
return super.reqListener;
}
@Override
public Request createRequest(int commandCode, ApplicationId appId, String destRealm) {
if (isValid) {
setLastAccessTime();
IRequest m = parser.createEmptyMessage(IRequest.class, commandCode, getAppId(appId));
m.setNetworkRequest(false);
m.setRequest(true);
m.getAvps().addAvp(Avp.SESSION_ID, sessionId, true, false, false);
appendAppId(appId, m);
if (destRealm != null) {
m.getAvps().addAvp(Avp.DESTINATION_REALM, destRealm, true, false, true);
}
MessageUtility.addOriginAvps(m, container.getMetaData());
return m;
} else {
throw new IllegalStateException("Session already released");
}
}
@Override
public Request createRequest(int commandCode, ApplicationId appId, String destRealm, String destHost) {
if (isValid) {
setLastAccessTime();
IRequest m = parser.createEmptyMessage(IRequest.class, commandCode, getAppId(appId));
m.setNetworkRequest(false);
m.setRequest(true);
m.getAvps().addAvp(Avp.SESSION_ID, sessionId, true, false, false);
appendAppId(appId, m);
if (destRealm != null) {
m.getAvps().addAvp(Avp.DESTINATION_REALM, destRealm, true, false, true);
}
if (destHost != null) {
m.getAvps().addAvp(Avp.DESTINATION_HOST, destHost, true, false, true);
}
MessageUtility.addOriginAvps(m, container.getMetaData());
return m;
} else {
throw new IllegalStateException("Session already released");
}
}
@Override
public Request createRequest(Request prevRequest) {
if (isValid) {
setLastAccessTime();
IRequest request = parser.createEmptyMessage(Request.class, (IMessage) prevRequest);
request.setRequest(true);
request.setNetworkRequest(false);
MessageUtility.addOriginAvps(request, container.getMetaData());
return request;
} else {
throw new IllegalStateException("Session already released");
}
}
@Override
public void release() {
isValid = false;
try {
lock.acquire(); // prevent container NullPointerException
if (container != null) {
if (istTimerId != null) {
container.getAssemblerFacility().getComponentInstance(ITimerFacility.class).cancel(istTimerId);
}
container.removeSessionListener(sessionId);
container.getAssemblerFacility().getComponentInstance(ISessionDatasource.class).removeSession(sessionId);
}
container = null;
parser = null;
reqListener = null;
} catch (InterruptedException e) {
logger.error("failure getting lock", e);
} finally {
lock.release();
}
}
@Override
public boolean isWrapperFor(Class> iface) throws InternalException {
return iface == RawSession.class;
}
@Override
@SuppressWarnings("unchecked")
public T unwrap(Class iface) throws InternalException {
return (T) (iface == RawSession.class ? new RawSessionImpl(container) : null);
}
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/impl/StackImpl.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.impl;
import static org.jdiameter.client.impl.helpers.ExtensionPoint.ControllerLayer;
import static org.jdiameter.client.impl.helpers.ExtensionPoint.StackLayer;
import static org.jdiameter.client.impl.helpers.ExtensionPoint.TransportLayer;
import static org.jdiameter.client.impl.helpers.Parameters.Assembler;
import static org.jdiameter.common.api.concurrent.IConcurrentFactory.ScheduledExecServices.ProcessingMessageTimer;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import org.jdiameter.api.AvpDataException;
import org.jdiameter.api.BaseSession;
import org.jdiameter.api.Configuration;
import org.jdiameter.api.DisconnectCause;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.MetaData;
import org.jdiameter.api.Mode;
import org.jdiameter.api.NetworkReqListener;
import org.jdiameter.api.Peer;
import org.jdiameter.api.PeerState;
import org.jdiameter.api.PeerTable;
import org.jdiameter.api.RouteException;
import org.jdiameter.api.SessionFactory;
import org.jdiameter.api.app.StateChangeListener;
import org.jdiameter.api.validation.Dictionary;
import org.jdiameter.api.validation.ValidatorLevel;
import org.jdiameter.client.api.IAssembler;
import org.jdiameter.client.api.IContainer;
import org.jdiameter.client.api.IMessage;
import org.jdiameter.client.api.IMetaData;
import org.jdiameter.client.api.StackState;
import org.jdiameter.client.api.controller.IPeer;
import org.jdiameter.client.api.controller.IPeerTable;
import org.jdiameter.client.impl.helpers.Parameters;
import org.jdiameter.common.api.concurrent.IConcurrentFactory;
import org.jdiameter.common.api.data.ISessionDatasource;
import org.jdiameter.common.api.statistic.IStatisticProcessor;
import org.jdiameter.common.api.timer.ITimerFacility;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Use stack extension point
*
* @author erick.svenson@yahoo.com
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public class StackImpl implements IContainer, StackImplMBean {
private static final Logger log = LoggerFactory.getLogger(StackImpl.class);
protected IAssembler assembler;
protected IConcurrentFactory concurrentFactory;
protected Configuration config;
protected IPeerTable peerManager;
protected StackState state = StackState.IDLE;
protected Lock lock = new ReentrantLock();
/**
* Use for processing request time-out tasks (for all active peers)
*/
protected ScheduledExecutorService scheduledFacility;
@Override
@SuppressWarnings("unchecked")
public SessionFactory init(Configuration config) throws IllegalDiameterStateException, InternalException {
lock.lock();
if (log.isInfoEnabled()) {
log.info("(-)(-)(-)(-)(-) Initialising " + VersionProperties.instance.getProperty("vendor") +
" DIAMETER Stack v" + VersionProperties.instance.getProperty("version") + " (-)(-)(-)(-)(-)");
}
try {
if (state != StackState.IDLE) {
throw new IllegalDiameterStateException();
}
try {
Class assemblerClass = Class.forName(config.getStringValue(Assembler.ordinal(), (String) Assembler.defValue()));
assembler = (IAssembler) assemblerClass.getConstructor(Configuration.class).newInstance(config);
// register common instances
assembler.registerComponentInstance(this);
assembler.registerComponentInstance(config);
} catch (Exception e) {
throw new InternalException(e);
}
this.config = config;
this.concurrentFactory = assembler.getComponentInstance(IConcurrentFactory.class);
try {
Configuration[] dictionaryConfigs = config.getChildren(Parameters.Dictionary.ordinal());
// Initialize with default values
String dictionaryClassName = (String) Parameters.DictionaryClass.defValue();
Boolean validatorEnabled = (Boolean) Parameters.DictionaryEnabled.defValue();
ValidatorLevel validatorSendLevel = ValidatorLevel
.fromString((String) Parameters.DictionarySendLevel.defValue());
ValidatorLevel validatorReceiveLevel = ValidatorLevel
.fromString((String) Parameters.DictionaryReceiveLevel.defValue());
if (dictionaryConfigs != null && dictionaryConfigs.length > 0) {
Configuration dictionaryConfiguration = dictionaryConfigs[0];
dictionaryClassName = dictionaryConfiguration.getStringValue(Parameters.DictionaryClass.ordinal(),
(String) Parameters.DictionaryClass.defValue());
validatorEnabled = dictionaryConfiguration.getBooleanValue(Parameters.DictionaryEnabled.ordinal(),
(Boolean) Parameters.DictionaryEnabled.defValue());
validatorSendLevel = ValidatorLevel.fromString(dictionaryConfiguration.getStringValue(
Parameters.DictionarySendLevel.ordinal(), (String) Parameters.DictionarySendLevel.defValue()));
validatorReceiveLevel = ValidatorLevel
.fromString(dictionaryConfiguration.getStringValue(Parameters.DictionaryReceiveLevel.ordinal(),
(String) Parameters.DictionaryReceiveLevel.defValue()));
}
createDictionary(dictionaryClassName, validatorEnabled, validatorSendLevel, validatorReceiveLevel);
} catch (Exception e) {
throw new InternalException(e);
}
// create manager
this.peerManager = assembler.getComponentInstance(IPeerTable.class);
this.peerManager.setAssembler(assembler);
this.state = StackState.CONFIGURED;
} finally {
lock.unlock();
}
return assembler.getComponentInstance(SessionFactory.class);
}
private void createDictionary(String clazz, boolean validatorEnabled, ValidatorLevel validatorSendLevel,
ValidatorLevel validatorReceiveLevel) throws InternalException {
// Defer call to singleton
DictionarySingleton.init(clazz, validatorEnabled, validatorSendLevel, validatorReceiveLevel);
}
@Override
public SessionFactory getSessionFactory() throws IllegalDiameterStateException {
if (state == StackState.CONFIGURED || state == StackState.STARTED) {
// FIXME: When possible, get rid of IoC here.
return assembler.getComponentInstance(SessionFactory.class);
} else {
throw new IllegalDiameterStateException();
}
}
@Override
public Dictionary getDictionary() throws IllegalDiameterStateException {
return DictionarySingleton.getDictionary();
}
@Override
public void start() throws IllegalDiameterStateException, InternalException {
lock.lock();
try {
if (state != StackState.STOPPED && state != StackState.CONFIGURED) {
throw new IllegalDiameterStateException();
}
scheduledFacility = concurrentFactory.getScheduledExecutorService(ProcessingMessageTimer.name());
assembler.getComponentInstance(ISessionDatasource.class).start();
assembler.getComponentInstance(IStatisticProcessor.class).start();
assembler.getComponentInstance(ITimerFacility.class);
startPeerManager();
state = StackState.STARTED;
} finally {
lock.unlock();
}
}
@Override
@SuppressWarnings("unchecked")
public void start(final Mode mode, long timeOut, TimeUnit timeUnit)
throws IllegalDiameterStateException, InternalException {
lock.lock();
try {
if (state != StackState.STOPPED && state != StackState.CONFIGURED) {
throw new IllegalDiameterStateException();
}
scheduledFacility = concurrentFactory.getScheduledExecutorService(ProcessingMessageTimer.name());
assembler.getComponentInstance(IStatisticProcessor.class).start();
assembler.getComponentInstance(ISessionDatasource.class).start();
assembler.getComponentInstance(ITimerFacility.class);
List peerTable = peerManager.getPeerTable();
// considering only "to connect" peers are on the table at this time...
final CountDownLatch barrier = new CountDownLatch(
Mode.ANY_PEER.equals(mode) ? Math.min(peerTable.size(), 1) : peerTable.size());
StateChangeListener listener = new AbstractStateChangeListener() {
@Override
public void stateChanged(Enum oldState, Enum newState) {
if (PeerState.OKAY.equals(newState)) {
barrier.countDown();
}
}
};
for (Peer p : peerTable) {
((IPeer) p).addStateChangeListener(listener);
}
startPeerManager();
try {
barrier.await(timeOut, timeUnit);
if (barrier.getCount() != 0) {
throw new InternalException("TimeOut");
}
state = StackState.STARTED;
} catch (InterruptedException e) {
throw new InternalException("TimeOut");
} finally {
for (Peer p : peerTable) {
((IPeer) p).remStateChangeListener(listener);
}
}
if (log.isInfoEnabled()) {
log.info("Started {} DIAMETER Stack. Listening on {} ({})",
VersionProperties.instance.getProperty("vendor"),
getMetaData().getLocalPeer().getUri(),
getMetaData().getLocalPeer().getIPAddresses()[0]);
} //if
} finally {
lock.unlock();
}
}
private void startPeerManager() throws InternalException {
try {
if (peerManager != null) {
peerManager.start();
}
getMetaData().unwrap(IMetaData.class).updateLocalHostStateId();
} catch (Exception e) {
throw new InternalException(e);
}
}
@Override
@SuppressWarnings("unchecked")
public void stop(long timeOut, TimeUnit timeUnit, int disconnectCause)
throws IllegalDiameterStateException, InternalException {
lock.lock();
try {
if (state == StackState.STARTED || state == StackState.CONFIGURED) {
if (log.isInfoEnabled()) {
log.info("(-)(-)(-)(-)(-) Stopping " + VersionProperties.instance.getProperty("vendor")
+ " DIAMETER Stack v" + VersionProperties.instance.getProperty("version") + " (-)(-)(-)(-)(-)");
}
List peerTable = peerManager.getPeerTable();
final CountDownLatch barrier = new CountDownLatch(peerTable.size());
StateChangeListener listener = new AbstractStateChangeListener() {
@Override
public void stateChanged(Enum oldState, Enum newState) {
if (PeerState.DOWN.equals(newState)) {
barrier.countDown();
}
}
};
for (Peer p : peerTable) {
if (p.getState(PeerState.class).equals(PeerState.DOWN)) {
barrier.countDown();
} else {
((IPeer) p).addStateChangeListener(listener);
}
}
if (peerManager != null) {
try {
peerManager.stopping(disconnectCause);
} catch (Exception e) {
log.warn("Stopping error", e);
}
}
try {
barrier.await(timeOut, timeUnit);
if (barrier.getCount() != 0) {
throw new InternalException("TimeOut");
}
} catch (InterruptedException e) {
throw new InternalException("TimeOut");
} finally {
state = StackState.STOPPED;
for (Peer p : peerTable) {
((IPeer) p).remStateChangeListener(listener);
}
}
assembler.getComponentInstance(ISessionDatasource.class).stop();
assembler.getComponentInstance(IStatisticProcessor.class).stop();
try {
if (peerManager != null) {
peerManager.stopped();
}
// Clear all timeout tasks
if (scheduledFacility != null) {
concurrentFactory.shutdownNow(scheduledFacility);
}
} catch (Exception e) {
log.warn("Stopped error", e);
}
state = StackState.STOPPED;
if (log.isInfoEnabled()) {
log.info("(-)(-)(-)(-)(-) Stopped " + VersionProperties.instance.getProperty("vendor")
+ " DIAMETER Stack v" + VersionProperties.instance.getProperty("version") + " (-)(-)(-)(-)(-)");
}
}
} finally {
lock.unlock();
}
}
@Override
public void destroy() {
// Be friendly
if (state == StackState.STARTED) {
log.warn(
"Calling destroy() with Stack in STARTED state. Calling stop(REBOOTING) before, please do it yourself with the proper cause.");
stop(DisconnectCause.REBOOTING);
}
lock.lock();
try {
if (peerManager != null) {
peerManager.destroy();
}
if (assembler != null) {
assembler.destroy();
}
if (scheduledFacility != null) {
concurrentFactory.shutdownNow(scheduledFacility);
}
} catch (Exception e) {
log.warn("Destroy error", e);
} finally {
state = StackState.IDLE;
lock.unlock();
}
}
@Override
public boolean isActive() {
return state == StackState.STARTED;
}
@Override
public java.util.logging.Logger getLogger() {
return java.util.logging.Logger.getAnonymousLogger();
}
@Override
public MetaData getMetaData() {
if (state == StackState.IDLE) {
throw new IllegalStateException("Meta data not defined");
}
return assembler.getComponentInstance(IMetaData.class);
}
@Override
@SuppressWarnings("unchecked")
public T getSession(String sessionId, Class clazz) throws InternalException {
if (getState() == StackState.IDLE) {
throw new InternalException("Illegal state of stack");
}
BaseSession bs = assembler.getComponentInstance(ISessionDatasource.class).getSession(sessionId);
return bs != null ? (T) bs : null;
}
@Override
public boolean isWrapperFor(Class> aClass) throws InternalException {
boolean isWrap = aClass == PeerTable.class;
if (!isWrap) {
isWrap = assembler.getChilds()[StackLayer.id()].getComponentInstance(aClass) != null;
}
if (!isWrap) {
isWrap = assembler.getChilds()[ControllerLayer.id()].getComponentInstance(aClass) != null;
}
if (!isWrap) {
isWrap = assembler.getChilds()[TransportLayer.id()].getComponentInstance(aClass) != null;
}
return isWrap;
}
@Override
@SuppressWarnings("unchecked")
public T unwrap(Class aClass) throws InternalException {
Object unwrapObject = null;
if (aClass == PeerTable.class) {
unwrapObject = assembler.getComponentInstance(aClass);
}
// TODO: "layers" should be removed....
if (unwrapObject == null) {
unwrapObject = assembler.getChilds()[StackLayer.id()].getComponentInstance(aClass);
}
if (unwrapObject == null) {
unwrapObject = assembler.getChilds()[ControllerLayer.id()].getComponentInstance(aClass);
}
if (unwrapObject == null) {
unwrapObject = assembler.getChilds()[TransportLayer.id()].getComponentInstance(aClass);
}
return (T) unwrapObject;
}
// Extended methods
@Override
public StackState getState() {
return state;
}
@Override
public Configuration getConfiguration() {
return config;
}
@Override
public IAssembler getAssemblerFacility() {
return assembler;
}
@Override
public void sendMessage(IMessage message)
throws RouteException, AvpDataException, IllegalDiameterStateException, IOException {
peerManager.sendMessage(message);
}
@Override
public void addSessionListener(String sessionId, NetworkReqListener listener) {
peerManager.addSessionReqListener(sessionId, listener);
}
@Override
public void removeSessionListener(String sessionId) {
peerManager.removeSessionListener(sessionId);
}
@Override
public ScheduledExecutorService getScheduledFacility() {
return scheduledFacility;
}
@Override
public IConcurrentFactory getConcurrentFactory() {
return this.concurrentFactory;
}
@Override
public String configuration() {
return config != null ? config.toString() : "not set";
}
@Override
public String metaData() {
try {
return getMetaData().toString();
} catch (Exception exc) {
return "not set";
}
}
@Override
public String peerDescription(String name) {
try {
for (Peer p : unwrap(PeerTable.class).getPeerTable()) {
if (p.getUri().getFQDN().equals(name)) {
return p.toString();
}
}
} catch (InternalException e) {
log.debug("InternalException", e);
}
return "not set";
}
@Override
public String peerList() {
try {
return unwrap(PeerTable.class).getPeerTable().toString();
} catch (InternalException e) {
return "not set";
}
}
@Override
public void stop(int disconnectCause) {
try {
stop(10, TimeUnit.SECONDS, disconnectCause);
} catch (Exception e) {
log.debug("Exception", e);
}
}
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/impl/StackImplMBean.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.impl;
import org.jdiameter.api.InternalException;
/**
* Stack MBean interface.
*
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public interface StackImplMBean {
/**
* Return string representation of stack instanceconfiguration
*
* @return string representation of stack instance configuration
*/
String configuration();
/**
* Return string representation of stack instance metadata
*
* @return string representation of stack instance metadata
*/
String metaData();
/**
* Reurn description (include state) of defined peer
*
* @param name peer host name
*
* @return description of defined peer
*/
String peerDescription(String name);
/**
* Return list of peer
*
* @return list of peer
*/
String peerList();
/**
* Return true if stack is started
*
* @return true if stack is started
*/
boolean isActive();
/**
* Run stop procedure
*/
void stop(int disconnectCause);
/**
* Run startd procedure
*
* @throws org.jdiameter.api.IllegalDiameterStateException
* @throws InternalException
*/
void start() throws org.jdiameter.api.IllegalDiameterStateException, InternalException;
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/impl/VersionProperties.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.impl;
import java.io.InputStream;
import java.util.Collections;
import java.util.Map;
import java.util.Properties;
/**
* @author Bartosz Baranowski
* @author Alexandre Mendonca
*/
@SuppressWarnings("all") //3rd party lib
public class VersionProperties {
/**
* The single instance.
*/
public static final VersionProperties instance = new VersionProperties();
/**
* The version properties.
*/
private Properties props;
/**
* Do not allow direct public construction.
*/
private VersionProperties() {
props = loadProperties();
}
/**
* Returns an unmodifiable map of version properties.
*
* @return
*/
public Map getProperties() {
return Collections.unmodifiableMap(props);
}
/**
* Returns the value for the given property name.
*
* @param name - The name of the property.
*
* @return The property value or null if the property is not set.
*/
public String getProperty(final String name) {
return props.getProperty(name);
}
/**
* Returns the version information as a string.
*
* @return Basic information as a string.
*/
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
boolean first = true;
for (Object key : props.keySet()) {
if (first) {
first = false;
} else {
sb.append(" , ");
}
sb.append(key).append(" = ").append(props.get(key));
}
return sb.toString();
}
/**
* Load the version properties from a resource.
*/
private Properties loadProperties() {
props = new Properties();
try {
InputStream in = VersionProperties.class.getResourceAsStream("/META-INF/version.properties");
props.load(in);
in.close();
} catch (Exception e) {
// failed to load version properties. go with defaults
props.put("vendor", "Mobicents");
props.put("version", "UN.DEFINED");
}
return props;
}
}
================================================
FILE: core/jdiameter/impl/src/main/java/org/jdiameter/client/impl/annotation/Recoder.java
================================================
/*
* TeleStax, Open Source Cloud Communications
* Copyright 2011-2016, 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
*
* This file incorporates work covered by the following copyright and
* permission notice:
*
* JBoss, Home of Professional Open Source
* Copyright 2007-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.jdiameter.client.impl.annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jdiameter.api.ApplicationId;
import org.jdiameter.api.Avp;
import org.jdiameter.api.AvpDataException;
import org.jdiameter.api.AvpSet;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.Message;
import org.jdiameter.api.MetaData;
import org.jdiameter.api.Request;
import org.jdiameter.api.SessionFactory;
import org.jdiameter.api.annotation.AvpDscr;
import org.jdiameter.api.annotation.AvpFlag;
import org.jdiameter.api.annotation.AvpType;
import org.jdiameter.api.annotation.Child;
import org.jdiameter.api.annotation.CommandDscr;
import org.jdiameter.api.annotation.CommandFlag;
import org.jdiameter.api.annotation.Getter;
import org.jdiameter.api.annotation.Setter;
import org.jdiameter.client.api.IMessage;
import org.jdiameter.client.api.annotation.IRecoder;
import org.jdiameter.client.api.annotation.RecoderException;
import org.jdiameter.client.impl.RawSessionImpl;
import org.jdiameter.client.impl.annotation.internal.ClassInfo;
import org.jdiameter.client.impl.annotation.internal.ConstructorInfo;
import org.jdiameter.client.impl.annotation.internal.MethodInfo;
import org.jdiameter.client.impl.annotation.internal.Storage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
*/
@SuppressWarnings("all") //3rd party lib
public class Recoder implements IRecoder {
// TODO full min/max/position constrains and optimization (caching)
private static final Logger log = LoggerFactory.getLogger(Recoder.class);
private Storage storage = new Storage();
private final RawSessionImpl rawSession;
private final MetaData metaData;
public Recoder(SessionFactory factory, MetaData metaData) {
this.metaData = metaData;
try {
this.rawSession = (RawSessionImpl) factory.getNewRawSession();
} catch (InternalException e) {
throw new IllegalArgumentException(e);
}
}
// =======================================================================================
//@Override
@Override
public Message encodeToRequest(Object yourDomainMessageObject, Avp... additionalAvp) throws RecoderException {
return encode(yourDomainMessageObject, null, 0, additionalAvp);
}
//@Override
@Override
public Message encodeToAnswer(Object yourDomainMessageObject, Request request, long resultCode) throws RecoderException {
return encode(yourDomainMessageObject, request, resultCode);
}
public Message encode(Object yourDomainMessageObject, Request request, long resultCode, Avp... addAvp)
throws RecoderException {
IMessage message = null;
ClassInfo classInfo = storage.getClassInfo(yourDomainMessageObject.getClass());
CommandDscr commandDscr = classInfo.getAnnotation(CommandDscr.class);
if (commandDscr != null) {
// Get command parameters
if (request == null) {
message = (IMessage) rawSession.createMessage(commandDscr.code(), ApplicationId.createByAccAppId(0));
message.setRequest(true);
message.getAvps().addAvp(addAvp);
try {
if (message.getAvps().getAvp(Avp.AUTH_APPLICATION_ID) != null) {
message.setHeaderApplicationId(message.getAvps().getAvp(Avp.AUTH_APPLICATION_ID).getUnsigned32());
} else if (message.getAvps().getAvp(Avp.ACCT_APPLICATION_ID) != null) {
message.setHeaderApplicationId(message.getAvps().getAvp(Avp.ACCT_APPLICATION_ID).getUnsigned32());
} else if (message.getAvps().getAvp(Avp.VENDOR_SPECIFIC_APPLICATION_ID) != null) {
message.setHeaderApplicationId(message.getAvps().getAvp(Avp.VENDOR_SPECIFIC_APPLICATION_ID).getGrouped()
.getAvp(Avp.VENDOR_ID).getUnsigned32());
}
} catch (Exception exc) {
throw new RecoderException(exc);
}
if (message.getAvps().getAvp(Avp.ORIGIN_HOST) == null) {
message.getAvps().addAvp(Avp.ORIGIN_HOST, metaData.getLocalPeer().getUri().getFQDN(), true, false, true);
}
if (message.getAvps().getAvp(Avp.ORIGIN_REALM) == null) {
message.getAvps().addAvp(Avp.ORIGIN_REALM, metaData.getLocalPeer().getRealmName(), true, false, true);
}
} else {
message = (IMessage) request.createAnswer(resultCode);
}
for (CommandFlag f : commandDscr.flags()) {
switch (f) {
case E:
message.setError(true);
break;
case P:
message.setProxiable(true);
break;
case R:
message.setRequest(true);
break;
case T:
message.setReTransmitted(true);
break;
}
}
// Find top level avp in getter-annotation methods
Map chMap = getChildInstance(yourDomainMessageObject, classInfo, null);
// Fill
for (Child ch : commandDscr.childs()) {
fillChild(message.getAvps(), ch, chMap);
}
} else {
log.debug("Can not found annotation for object {}", yourDomainMessageObject);
}
return message;
}
private Map getChildInstance(Object yourDomainMessageObject, ClassInfo c, Map chMap)
throws RecoderException {
if (chMap == null) {
chMap = new HashMap();
}
for (MethodInfo mi : c.getMethodsInfo()) {
if (mi.getAnnotation(Getter.class) != null) {
try {
Object value = mi.getMethod().invoke(yourDomainMessageObject);
if (value != null) {
Class mc = value.getClass().isArray() ? value.getClass().getComponentType() : value.getClass();
chMap.put(mc.getName(), value);
for (Class> i : mc.getInterfaces()) {
chMap.put(i.getName(), value);
}
}
} catch (IllegalAccessException e) {
throw new RecoderException(e);
} catch (InvocationTargetException e) {
throw new RecoderException(e);
}
}
}
return chMap;
}
private void fillChild(AvpSet as, Child ci, Map childs) throws RecoderException {
Object c = childs.get(ci.ref().getName());
if (c != null) {
ClassInfo cc = storage.getClassInfo(ci.ref());
AvpDscr ad = cc.getAnnotation(AvpDscr.class);
if (ad != null) {
boolean m = false, p = false;
// cast <=> getter for primitive
switch (ad.type()) {
case Integer32:
case Enumerated: {
for (AvpFlag f : ad.must()) {
if (AvpFlag.M.equals(f)) {
m = true;
} else if (AvpFlag.P.equals(f)) {
p = true;
}
}
// find in getter
Collection cv = getValue(c, Integer.class);
for (Integer v : cv) {
as.addAvp(ad.code(), v, ad.vendorId(), m, p);
}
}
break;
case Unsigned32: {
for (AvpFlag f : ad.must()) {
if (AvpFlag.M.equals(f)) {
m = true;
} else if (AvpFlag.P.equals(f)) {
p = true;
}
}
Collection cv = getValue(c, Long.class);
for (Long v : cv) {
as.addAvp(ad.code(), v, ad.vendorId(), m, p, true);
}
}
break;
case Unsigned64:
case Integer64: {
for (AvpFlag f : ad.must()) {
if (AvpFlag.M.equals(f)) {
m = true;
} else if (AvpFlag.P.equals(f)) {
p = true;
}
}
Collection cv = getValue(c, Long.class);
for (Long v : cv) {
as.addAvp(ad.code(), v, ad.vendorId(), m, p);
}
}
break;
case Float32: {
for (AvpFlag f : ad.must()) {
if (AvpFlag.M.equals(f)) {
m = true;
} else if (AvpFlag.P.equals(f)) {
p = true;
}
}
Collection cv = getValue(c, Float.class);
for (Float v : cv) {
as.addAvp(ad.code(), v, ad.vendorId(), m, p);
}
}
break;
case Float64: {
for (AvpFlag f : ad.must()) {
if (AvpFlag.M.equals(f)) {
m = true;
} else if (AvpFlag.P.equals(f)) {
p = true;
}
}
Collection cv = getValue(c, Double.class);
for (Double v : cv) {
as.addAvp(ad.code(), v, ad.vendorId(), m, p);
}
}
break;
case OctetString:
case Address:
case Time:
case DiameterIdentity:
case DiameterURI:
case IPFilterRule:
case QoSFilterRule: {
for (AvpFlag f : ad.must()) {
if (AvpFlag.M.equals(f)) {
m = true;
} else if (AvpFlag.P.equals(f)) {
p = true;
}
}
Collection cv = getValue(c, String.class);
for (String v : cv) {
as.addAvp(ad.code(), v, ad.vendorId(), m, p, true);
}
}
break;
case UTF8String: {
for (AvpFlag f : ad.must()) {
if (AvpFlag.M.equals(f)) {
m = true;
} else if (AvpFlag.P.equals(f)) {
p = true;
}
}
Collection cv = getValue(c, String.class);
for (String v : cv) {
as.addAvp(ad.code(), v, ad.vendorId(), m, p, false);
}
}
break;
case Grouped: {
for (AvpFlag f : ad.must()) {
if (AvpFlag.M.equals(f)) {
m = true;
} else if (AvpFlag.P.equals(f)) {
p = true;
}
}
Collection