diff --git a/components/sms-mgt/io.entgra.sms.mgt.common/pom.xml b/components/sms-mgt/io.entgra.sms.mgt.common/pom.xml
new file mode 100644
index 00000000000..6595066646b
--- /dev/null
+++ b/components/sms-mgt/io.entgra.sms.mgt.common/pom.xml
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+ org.wso2.carbon.devicemgt
+ sms-mgt
+ 4.1.12-SNAPSHOT
+ ../pom.xml
+
+
+ 4.0.0
+ io.entgra.sms.mgt.common
+ bundle
+ Entgra IoT - SMS Management Common
+ Entgra IoT - SMS Management Common
+ http://entgra.io
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ ${project.artifactId}
+ ${project.artifactId}
+ ${carbon.device.mgt.version}
+ SMS Management Common Bundle
+
+ io.entgra.sms.mgt.common.*
+
+
+ io.swagger.annotations; version="${swagger.annotations.version}"; resolution:=optional,
+
+
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+
+ ${basedir}/target/coverage-reports/jacoco-unit.exec
+
+
+
+ jacoco-initialize
+
+ prepare-agent
+
+
+
+ jacoco-site
+ test
+
+ report
+
+
+ ${basedir}/target/coverage-reports/jacoco-unit.exec
+ ${basedir}/target/coverage-reports/site
+
+
+
+
+
+
+
+
+
+
+ io.swagger
+ swagger-annotations
+ provided
+
+
+
+
+
diff --git a/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/SMSMgtConstants.java b/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/SMSMgtConstants.java
new file mode 100644
index 00000000000..cbe46d742e4
--- /dev/null
+++ b/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/SMSMgtConstants.java
@@ -0,0 +1,10 @@
+package io.entgra.sms.mgt.common;
+
+/**
+ * This class holds SMS Management Constants
+ */
+public final class SMSMgtConstants {
+
+ public static final String SCOPE = "scope";
+ public static final String SMS_CONFIG_XML_NAME = "sms-config.xml";
+}
diff --git a/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/bean/SMSMessage.java b/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/bean/SMSMessage.java
new file mode 100644
index 00000000000..23cde039b99
--- /dev/null
+++ b/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/bean/SMSMessage.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2021, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
+ *
+ * Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package io.entgra.sms.mgt.common.bean;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * This class hold the SMS Message
+ */
+public class SMSMessage {
+
+ @ApiModelProperty(
+ name = "from",
+ value = "Sender's number.",
+ required = true
+ )
+ private String from;
+
+ @ApiModelProperty(
+ name = "to",
+ value = "Recipient's number."
+ )
+ private String to;
+
+ @ApiModelProperty(
+ name = "body",
+ value = "SMS message content.",
+ required = true
+ )
+ private String body;
+
+ public String getFrom() {
+ return from;
+ }
+
+ public void setFrom(String from) {
+ this.from = from;
+ }
+
+ public String getTo() {
+ return to;
+ }
+
+ public void setTo(String to) {
+ this.to = to;
+ }
+
+ public String getBody() {
+ return body;
+ }
+
+ public void setBody(String body) {
+ this.body = body;
+ }
+}
diff --git a/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/config/Property.java b/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/config/Property.java
new file mode 100644
index 00000000000..de667cfd115
--- /dev/null
+++ b/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/config/Property.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2021, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
+ *
+ * Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package io.entgra.sms.mgt.common.config;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlValue;
+
+@XmlRootElement(name = "Property")
+public class Property {
+
+ private String name;
+ private String value;
+
+ @XmlAttribute(name = "name")
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @XmlValue
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+}
diff --git a/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/config/SMSConfiguration.java b/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/config/SMSConfiguration.java
new file mode 100644
index 00000000000..7992533c764
--- /dev/null
+++ b/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/config/SMSConfiguration.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2021, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
+ *
+ * Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package io.entgra.sms.mgt.common.config;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.List;
+
+@XmlRootElement(name = "SMSConfiguration")
+public class SMSConfiguration {
+
+ private List smsGateways;
+
+ @XmlElementWrapper(name = "Gateways")
+ @XmlElement(name = "Gateway")
+ public List getSMSGateways() {
+ return smsGateways;
+ }
+
+ public void setSMSGateways(List smsGateways) {
+ this.smsGateways = smsGateways;
+ }
+
+ /**
+ * Retrieve the default SMS Gateway as defined in the SMS configuration.
+ * @return default {@link SMSGateway}
+ */
+ public SMSGateway getDefaultSMSGateway() {
+ for (SMSGateway smsGateway : smsGateways) {
+ if (smsGateway.isDefault()) {
+ return smsGateway;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Retrieve SMS Gateway by the provided Gateway Name
+ * @param gatewayName has the name of the Gateway to be retrieved
+ * @return retrieved {@link SMSGateway}
+ */
+ public SMSGateway getSMSGateway(String gatewayName) {
+ for (SMSGateway smsGateway : smsGateways) {
+ if (gatewayName.equals(smsGateway.getName())) {
+ return smsGateway;
+ }
+ }
+ return null;
+ }
+}
diff --git a/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/config/SMSGateway.java b/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/config/SMSGateway.java
new file mode 100644
index 00000000000..988faca8e54
--- /dev/null
+++ b/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/config/SMSGateway.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2021, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
+ *
+ * Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package io.entgra.sms.mgt.common.config;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.List;
+
+@XmlRootElement(name = "Gateway")
+public class SMSGateway {
+
+ private String name;
+ private String extensionClass;
+ private boolean isDefault;
+ private List properties;
+
+ @XmlAttribute(name = "name")
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @XmlAttribute(name = "extensionClass")
+ public String getExtensionClass() {
+ return extensionClass;
+ }
+
+ public void setExtensionClass(String extensionClass) {
+ this.extensionClass = extensionClass;
+ }
+
+ @XmlAttribute(name = "isDefault")
+ public boolean isDefault() {
+ return isDefault;
+ }
+
+ public void setDefault(boolean aDefault) {
+ isDefault = aDefault;
+ }
+
+ @XmlElementWrapper(name = "Properties")
+ @XmlElement(name = "Property")
+ public List getProperties() {
+ return properties;
+ }
+
+ public void setProperties(List properties) {
+ this.properties = properties;
+ }
+
+ /**
+ * Retrives the Property based on the provided property name
+ * @param propertyName has the name of the Property to be retrieved
+ * @return retrieved {@link Property}
+ */
+ public Property getPropertyByName(String propertyName) {
+ for (Property property : properties) {
+ if (propertyName.equals(property.getName())) {
+ return property;
+ }
+ }
+ return null;
+ }
+}
diff --git a/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/exception/SMSSenderException.java b/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/exception/SMSSenderException.java
new file mode 100644
index 00000000000..8a86a0c4064
--- /dev/null
+++ b/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/exception/SMSSenderException.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2021, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
+ *
+ * Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package io.entgra.sms.mgt.common.exception;
+
+/**
+ * Exception that will be thrown during SMS Sender Management
+ */
+public class SMSSenderException extends Exception {
+
+ private static final long serialVersionUID = 3570365211845277909L;
+
+ public SMSSenderException(String msg, Exception nestedEx) {
+ super(msg, nestedEx);
+ }
+
+ public SMSSenderException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public SMSSenderException(String msg) {
+ super(msg);
+ }
+
+ public SMSSenderException() {
+ super();
+ }
+
+ public SMSSenderException(Throwable cause) {
+ super(cause);
+ }
+}
diff --git a/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/spi/SMSSender.java b/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/spi/SMSSender.java
new file mode 100644
index 00000000000..34b283384fe
--- /dev/null
+++ b/components/sms-mgt/io.entgra.sms.mgt.common/src/main/java/io/entgra/sms/mgt/common/spi/SMSSender.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2021, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
+ *
+ * Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package io.entgra.sms.mgt.common.spi;
+
+import io.entgra.sms.mgt.common.bean.SMSMessage;
+import io.entgra.sms.mgt.common.exception.SMSSenderException;
+
+/**
+ * Manages the sending of SMS.
+ * This interface can be implemented by SMS Senders and specific implementation can be done
+ * depending on the SMS Sender.
+ */
+public interface SMSSender {
+
+ /**
+ * Responsible for sending SMS.
+ * This method can be implemented by the relevant SMS Senders for specific sender related implementation.
+ * @param smsMessage which has data on the SMS to be send
+ * @throws SMSSenderException catches all other exception and {@link SMSSenderException} is thrown
+ */
+ void sendSMS(SMSMessage smsMessage) throws SMSSenderException;
+}
diff --git a/components/sms-mgt/pom.xml b/components/sms-mgt/pom.xml
new file mode 100644
index 00000000000..4a0d9a4e8fe
--- /dev/null
+++ b/components/sms-mgt/pom.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+ org.wso2.carbon.devicemgt
+ carbon-devicemgt
+ 4.1.12-SNAPSHOT
+ ../../pom.xml
+
+
+ 4.0.0
+ sms-mgt
+ pom
+ Entgra IoT - SMS Management Component
+ http://entgra.io
+
+
+
+ io.entgra.sms.mgt.core
+ io.entgra.sms.mgt.common
+ io.entgra.sms.mgt.api
+
+
+