001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.camel.component.smpp; 018 019 import org.apache.camel.Component; 020 import org.apache.camel.Consumer; 021 import org.apache.camel.Exchange; 022 import org.apache.camel.ExchangePattern; 023 import org.apache.camel.Processor; 024 import org.apache.camel.Producer; 025 import org.apache.camel.impl.DefaultEndpoint; 026 import org.jsmpp.bean.AlertNotification; 027 import org.jsmpp.bean.DataSm; 028 import org.jsmpp.bean.DeliverSm; 029 030 /** 031 * A SMPP Endpoint 032 * 033 * @version $Revision: 954209 $ 034 * @author muellerc 035 */ 036 public class SmppEndpoint extends DefaultEndpoint { 037 038 private SmppBinding binding; 039 private SmppConfiguration configuration; 040 041 public SmppEndpoint(String endpointUri, Component component, SmppConfiguration configuration) { 042 super(endpointUri, component); 043 this.configuration = configuration; 044 } 045 046 public boolean isSingleton() { 047 return true; 048 } 049 050 @Override 051 protected String createEndpointUri() { 052 return getConnectionString(); 053 } 054 055 @Override 056 public boolean isLenientProperties() { 057 return true; 058 } 059 060 public Consumer createConsumer(Processor processor) throws Exception { 061 return new SmppConsumer(this, configuration, processor); 062 } 063 064 public Producer createProducer() throws Exception { 065 return new SmppProducer(this, configuration); 066 } 067 068 /** 069 * Create a new exchange for communicating with this endpoint from a SMSC 070 * 071 * @param alertNotification the received message from the SMSC 072 * @return a new exchange 073 */ 074 public Exchange createOnAcceptAlertNotificationExchange(AlertNotification alertNotification) { 075 return createOnAcceptAlertNotificationExchange(getExchangePattern(), alertNotification); 076 } 077 078 /** 079 * Create a new exchange for communicating with this endpoint from a SMSC 080 * with the specified {@link ExchangePattern} such as whether its going 081 * to be an {@link ExchangePattern#InOnly} or {@link ExchangePattern#InOut} exchange 082 * 083 * @param exchangePattern the message exchange pattern for the exchange 084 * @param alertNotification the received message from the SMSC 085 * @return a new exchange 086 */ 087 public Exchange createOnAcceptAlertNotificationExchange(ExchangePattern exchangePattern, 088 AlertNotification alertNotification) { 089 Exchange exchange = createExchange(exchangePattern); 090 exchange.setProperty(Exchange.BINDING, getBinding()); 091 exchange.setIn(getBinding().createSmppMessage(alertNotification)); 092 return exchange; 093 } 094 095 /** 096 * Create a new exchange for communicating with this endpoint from a SMSC 097 * 098 * @param deliverSm the received message from the SMSC 099 * @return a new exchange 100 */ 101 public Exchange createOnAcceptDeliverSmExchange(DeliverSm deliverSm) throws Exception { 102 return createOnAcceptDeliverSmExchange(getExchangePattern(), deliverSm); 103 } 104 105 /** 106 * Create a new exchange for communicating with this endpoint from a SMSC 107 * with the specified {@link ExchangePattern} such as whether its going 108 * to be an {@link ExchangePattern#InOnly} or {@link ExchangePattern#InOut} exchange 109 * 110 * @param exchangePattern the message exchange pattern for the exchange 111 * @param deliverSm the received message from the SMSC 112 * @return a new exchange 113 */ 114 public Exchange createOnAcceptDeliverSmExchange(ExchangePattern exchangePattern, 115 DeliverSm deliverSm) throws Exception { 116 Exchange exchange = createExchange(exchangePattern); 117 exchange.setProperty(Exchange.BINDING, getBinding()); 118 exchange.setIn(getBinding().createSmppMessage(deliverSm)); 119 return exchange; 120 } 121 122 /** 123 * Create a new exchange for communicating with this endpoint from a SMSC 124 * 125 * @param dataSm the received message from the SMSC 126 * @param smppMessageId the smpp message id which will be used in the response 127 * @return a new exchange 128 */ 129 public Exchange createOnAcceptDataSm(DataSm dataSm, String smppMessageId) { 130 return createOnAcceptDataSm(getExchangePattern(), dataSm, smppMessageId); 131 } 132 133 /** 134 * Create a new exchange for communicating with this endpoint from a SMSC 135 * with the specified {@link ExchangePattern} such as whether its going 136 * to be an {@link ExchangePattern#InOnly} or {@link ExchangePattern#InOut} exchange 137 * 138 * @param exchangePattern the message exchange pattern for the exchange 139 * @param dataSm the received message from the SMSC 140 * @param smppMessageId the smpp message id which will be used in the response 141 * @return a new exchange 142 */ 143 public Exchange createOnAcceptDataSm(ExchangePattern exchangePattern, DataSm dataSm, String smppMessageId) { 144 Exchange exchange = createExchange(exchangePattern); 145 exchange.setProperty(Exchange.BINDING, getBinding()); 146 exchange.setIn(getBinding().createSmppMessage(dataSm, smppMessageId)); 147 return exchange; 148 } 149 150 /** 151 * Returns the connection string for the current connection which has the form: 152 * smpp://<user>@<host>:<port> 153 * 154 * @return the connection string 155 */ 156 public String getConnectionString() { 157 return (configuration.getUsingSSL() ? "smpps://" : "smpp://") 158 + getConfiguration().getSystemId() + "@" 159 + getConfiguration().getHost() + ":" 160 + getConfiguration().getPort(); 161 } 162 163 /** 164 * Returns the smpp configuration 165 * 166 * @return the configuration 167 */ 168 public SmppConfiguration getConfiguration() { 169 return configuration; 170 } 171 172 public SmppBinding getBinding() { 173 if (binding == null) { 174 binding = new SmppBinding(getConfiguration()); 175 } 176 return binding; 177 } 178 179 public void setBinding(SmppBinding binding) { 180 this.binding = binding; 181 } 182 }