diff --git a/.gitignore b/.gitignore
index aa724b7..12145e6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@
.externalNativeBuild
.cxx
local.properties
+/libs/**/build
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index fb7f4a8..adac9d0 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -1,6 +1,8 @@
-
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 9cd847f..c7920ab 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -1,5 +1,6 @@
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 860da66..7bfef59 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 5afe336..f199bd2 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -32,7 +32,7 @@ android {
}
dependencies {
-
+ implementation project(":libs:lpad-sm-dp-plus-connector")
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
diff --git a/libs/lpad-sm-dp-plus-connector/.classpath b/libs/lpad-sm-dp-plus-connector/.classpath
new file mode 100644
index 0000000..eb9002a
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/.classpath
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/libs/lpad-sm-dp-plus-connector/.project b/libs/lpad-sm-dp-plus-connector/.project
new file mode 100644
index 0000000..d384977
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/.project
@@ -0,0 +1,23 @@
+
+
+ lpad-sm-dp-plus-connector
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/libs/lpad-sm-dp-plus-connector/.settings/org.eclipse.core.resources.prefs b/libs/lpad-sm-dp-plus-connector/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..b073cd6
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding//target/generated-sources/asn1=UTF-8
+encoding/=UTF-8
diff --git a/libs/lpad-sm-dp-plus-connector/.settings/org.eclipse.jdt.apt.core.prefs b/libs/lpad-sm-dp-plus-connector/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000..d4313d4
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/libs/lpad-sm-dp-plus-connector/.settings/org.eclipse.jdt.core.prefs b/libs/lpad-sm-dp-plus-connector/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..46235dc
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/libs/lpad-sm-dp-plus-connector/.settings/org.eclipse.m2e.core.prefs b/libs/lpad-sm-dp-plus-connector/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/libs/lpad-sm-dp-plus-connector/build.gradle b/libs/lpad-sm-dp-plus-connector/build.gradle
new file mode 100644
index 0000000..cc53684
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/build.gradle
@@ -0,0 +1,36 @@
+apply plugin: 'java'
+
+configurations {
+ tool
+}
+
+dependencies {
+ tool 'javax.xml.bind:jaxb-api:2.3.0'
+ tool 'com.beanit:asn1bean-compiler:1.13.0'
+ implementation 'com.beanit:asn1bean:1.13.0'
+ implementation 'com.fazecast:jSerialComm:1.3.11'
+ implementation 'org.apache.commons:commons-lang3:3.7'
+ implementation 'commons-io:commons-io:2.6'
+ implementation 'commons-codec:commons-codec:1.11'
+ implementation 'com.google.code.gson:gson:2.8.4'
+ testImplementation 'junit:junit:4.12'
+ testImplementation 'org.mockito:mockito-all:1.10.19'
+ testImplementation 'com.github.tomakehurst:wiremock:2.17.0'
+}
+
+sourceSets.main.java.srcDirs = ['build/generated-sources/asn1','src/main/java']
+
+task genAsn1(type: JavaExec) {
+ mainClass = 'com.beanit.asn1bean.compiler.Compiler'
+ args "-o", "$projectDir/build/generated-sources/asn1", "-p", "com.truphone.rsp.dto.asn1", "-f", "$projectDir/src/main/resources/PKIXExplicit88.asn", "$projectDir/src/main/resources/PKIXImplicit88.asn", "$projectDir/src/main/resources/rsp.asn"
+ classpath configurations.tool
+}
+
+compileJava.dependsOn genAsn1
+
+description = 'LPAd SM-DP+ Connector'
+
+java {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+}
\ No newline at end of file
diff --git a/libs/lpad-sm-dp-plus-connector/pom.xml b/libs/lpad-sm-dp-plus-connector/pom.xml
new file mode 100644
index 0000000..6904bf5
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/pom.xml
@@ -0,0 +1,170 @@
+
+
+
+ lpad-sm-dp-plus-parent
+ com.truphone.lpad
+ 1.0.4
+
+
+ 4.0.0
+
+ lpad-sm-dp-plus-connector
+ LPAd SM-DP+ Connector
+
+
+
+ org.openmuc
+ jasn1-compiler
+
+
+ com.fazecast
+ jSerialComm
+
+
+ org.apache.commons
+ commons-lang3
+
+
+ commons-io
+ commons-io
+
+
+ commons-codec
+ commons-codec
+
+
+ com.google.code.gson
+ gson
+
+
+
+ junit
+ junit
+ test
+
+
+ org.mockito
+ mockito-all
+ test
+
+
+ com.github.tomakehurst
+ wiremock
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ ${java.version}
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ ${exec-maven-plugin.version}
+
+
+ generate-resources
+
+ java
+
+
+
+
+ java
+ org.openmuc.jasn1.compiler.Compiler
+
+ -o
+ ${project.basedir}/target/generated-sources/asn1/
+ -p
+ com.truphone.rsp.dto.asn1
+ -f
+ ${project.basedir}/src/main/resources/PKIXExplicit88.asn
+ ${project.basedir}/src/main/resources/PKIXImplicit88.asn
+ ${project.basedir}/src/main/resources/rsp.asn
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ ${build-helper-maven-plugin}
+
+
+ generate-sources
+
+ add-source
+
+
+
+ ${project.basedir}/target/generated-sources/asn1/
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ ${maven-jar-plugin.version}
+
+
+
+ true
+ lib/
+ com.truphone.lpa.ProfileAssistant
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+ ${maven-assembly-plugin.version}
+
+
+
+ com.truphone.lpa.ProfileAssistant
+
+
+
+ jar-with-dependencies
+
+
+
+
+ make-assembly
+ package
+
+ single
+
+
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/AllocateProfileResponse.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/AllocateProfileResponse.java
new file mode 100644
index 0000000..c3b5af8
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/AllocateProfileResponse.java
@@ -0,0 +1,59 @@
+package com.truphone.es9plus;
+
+public class AllocateProfileResponse {
+ private String acFormat;
+ private String smDpPlusAddress;
+ private String acToken;
+ private String smDpPlusOid;
+ private String confirmationCodeRequiredFlag;
+
+ public String getAcFormat() {
+
+ return acFormat;
+ }
+
+ public void setAcFormat(String acFormat) {
+
+ this.acFormat = acFormat;
+ }
+
+ public String getSmDpPlusAddress() {
+
+ return smDpPlusAddress;
+ }
+
+ public void setSmDpPlusAddress(String smDpPlusAddress) {
+
+ this.smDpPlusAddress = smDpPlusAddress;
+ }
+
+ public String getAcToken() {
+
+ return acToken;
+ }
+
+ public void setAcToken(String acToken) {
+
+ this.acToken = acToken;
+ }
+
+ public String getSmDpPlusOid() {
+
+ return smDpPlusOid;
+ }
+
+ public void setSmDpPlusOid(String smDpPlusOid) {
+
+ this.smDpPlusOid = smDpPlusOid;
+ }
+
+ public String getConfirmationCodeRequiredFlag() {
+
+ return confirmationCodeRequiredFlag;
+ }
+
+ public void setConfirmationCodeRequiredFlag(String confirmationCodeRequiredFlag) {
+
+ this.confirmationCodeRequiredFlag = confirmationCodeRequiredFlag;
+ }
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/Es9PlusImpl.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/Es9PlusImpl.java
new file mode 100644
index 0000000..6a3ea02
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/Es9PlusImpl.java
@@ -0,0 +1,216 @@
+package com.truphone.es9plus;
+
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.truphone.es9plus.message.request.AuthenticateClientReq;
+import com.truphone.es9plus.message.request.GetBoundProfilePackageReq;
+import com.truphone.es9plus.message.request.HandleNotificationReq;
+import com.truphone.es9plus.message.request.InitiateAuthenticationReq;
+import com.truphone.es9plus.message.response.AuthenticateClientResp;
+import com.truphone.es9plus.message.response.GetBoundProfilePackageResp;
+import com.truphone.es9plus.message.response.InitiateAuthenticationResp;
+import com.truphone.util.LogStub;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class Es9PlusImpl {
+ private static final Gson GS = new GsonBuilder().disableHtmlEscaping().create();
+ private static final Logger LOG = Logger.getLogger(Es9PlusImpl.class.getName());
+ private static final String INITIATE_AUTHENTICATION_PATH = "/gsma/rsp2/es9plus/initiateAuthentication";
+ private static final String AUTHENTICATE_CLIENT_PATH = "/gsma/rsp2/es9plus/authenticateClient";
+ private static final String GET_BOUND_PROFILE_PACKAGE_PATH = "/gsma/rsp2/es9plus/getBoundProfilePackage";
+ private static final String HANDLE_NOTIFICATION_PATH = "/gsma/rsp2/es9plus/handleNotification";
+ //private static final String ALLOCATE_PROFILE_PATH = "/custom/profile/";
+
+// private String rspServerUrl;
+
+// public void configure(String rspServerUrl) {
+//
+// this.rspServerUrl = rspServerUrl;
+// }
+
+ public InitiateAuthenticationResp initiateAuthentication(final String euiccChallenge,
+ final String euiccInfo1,
+ final String smdpAddress) {
+ try {
+ InitiateAuthenticationReq initiateAuthenticationReq = new InitiateAuthenticationReq();
+ initiateAuthenticationReq.setEuiccChallenge(euiccChallenge);
+ initiateAuthenticationReq.setEuiccInfo1(euiccInfo1);
+ initiateAuthenticationReq.setSmdpAddress(smdpAddress);
+ String body = GS.toJson(initiateAuthenticationReq);
+
+ if (LogStub.getInstance().isDebugEnabled()) {
+ LogStub.getInstance().logDebug(LOG, "RSP Request: " + body);
+ }
+
+ HttpResponse result = new HttpRSPClient().clientRSPRequest(body, "https://"+smdpAddress, INITIATE_AUTHENTICATION_PATH);
+ if (result != null && !"".equals(result.getContent())) {
+ String response = toJsonString(result.getContent());
+ if (LogStub.getInstance().isDebugEnabled()) {
+ LogStub.getInstance().logDebug(LOG, "RSP Response: " + response);
+ }
+ return GS.fromJson(response, InitiateAuthenticationResp.class);
+ }
+ } catch (Exception e) {
+ LOG.log(Level.SEVERE, "Error contacting RSP Server", e);
+
+ throw new RuntimeException("Unable to communicate with RSP Server");
+ }
+ return null;
+ }
+
+ public AuthenticateClientResp authenticateClient(final String transactionId,
+ final String authenticateServerResponse,
+ final String smdpAddress) {
+ try {
+ AuthenticateClientReq authenticateClientReq = new AuthenticateClientReq();
+ authenticateClientReq.setTransactionId(transactionId);
+ authenticateClientReq.setAuthenticateServerResponse(authenticateServerResponse);
+ String body = GS.toJson(authenticateClientReq);
+
+ if (LogStub.getInstance().isDebugEnabled()) {
+ LogStub.getInstance().logDebug(LOG, "RSP Request: " + body);
+ }
+
+ HttpResponse result = new HttpRSPClient().clientRSPRequest(body, "https://" + smdpAddress, AUTHENTICATE_CLIENT_PATH);
+ if (result != null && !"".equals(result.getContent())) {
+ String response = toJsonString(result.getContent());
+
+ if (LogStub.getInstance().isDebugEnabled()) {
+ LogStub.getInstance().logDebug(LOG, "RSP Response: " + response);
+ }
+
+ return GS.fromJson(response, AuthenticateClientResp.class);
+ } else {
+ LOG.severe("Error contacting RSP Server");
+
+ throw new RuntimeException("Unable to communicate with RSP Server");
+ }
+ } catch (Exception e) {
+ LOG.log(Level.SEVERE, "Error contacting RSP Server", e);
+
+ throw new RuntimeException("Unable to communicate with RSP Server");
+ }
+ }
+
+ public GetBoundProfilePackageResp getBoundProfilePackage(final String transactionId,
+ final String prepareDownloadResponse,
+ final String smdpAddress) {
+ try {
+ GetBoundProfilePackageReq getBoundProfilePackageReq = new GetBoundProfilePackageReq();
+ getBoundProfilePackageReq.setTransactionId(transactionId);
+ getBoundProfilePackageReq.setPrepareDownloadResponse(prepareDownloadResponse);
+ String body = GS.toJson(getBoundProfilePackageReq);
+
+ if (LogStub.getInstance().isDebugEnabled()) {
+ LogStub.getInstance().logDebug(LOG, "RSP Request: " + body);
+ }
+
+ HttpResponse result = new HttpRSPClient().clientRSPRequest(body, "https://" + smdpAddress, GET_BOUND_PROFILE_PACKAGE_PATH);
+ if (result != null && !"".equals(result.getContent())) {
+ String response = toJsonString(result.getContent());
+
+ if (LogStub.getInstance().isDebugEnabled()) {
+ LogStub.getInstance().logDebug(LOG, "RSP Response: " + response);
+ }
+
+ return GS.fromJson(response, GetBoundProfilePackageResp.class);
+ }
+ } catch (Exception e) {
+ LOG.log(Level.SEVERE, "Error contacting RSP Server", e);
+
+ throw new RuntimeException("Unable to communicate with RSP Server");
+ }
+
+ return null;
+ }
+
+ /**
+ * ES9+.handleNotification
+ */
+ public void handleNotification(final String pendingNotification, String serverAddress) {
+ try {
+ HandleNotificationReq handleNotificationReq = new HandleNotificationReq();
+
+ handleNotificationReq.setPendingNotification(pendingNotification);
+
+ String body = GS.toJson(handleNotificationReq);
+
+ if (LogStub.getInstance().isDebugEnabled()) {
+ LogStub.getInstance().logDebug(LOG, "RSP Request: " + body);
+ }
+
+
+ HttpResponse result = new HttpRSPClient().clientRSPRequest(body, "https://"+serverAddress, HANDLE_NOTIFICATION_PATH);
+
+ if (result != null && result.getStatusCode() == 204) {
+ if (LogStub.getInstance().isDebugEnabled()) {
+ LogStub.getInstance().logDebug(LOG, "RSP Response was 204 ");
+ }
+
+ } else {
+ LOG.severe("Error contacting RSP Server or not 204: " + result);
+
+ throw new RuntimeException("Unable to handle notification with RSP Server");
+ }
+
+ } catch (Exception e) {
+ LOG.log(Level.SEVERE, "Error contacting RSP Server", e);
+
+ throw new RuntimeException("Unable to handle notification with RSP Server");
+ }
+ }
+
+// public AllocateProfileResponse allocateProfile(final String eid,
+// final String mcc) {
+//
+// try {
+// String body = "eid=" + eid + "&mcc=" + mcc;
+//
+// if (LogStub.getInstance().isDebugEnabled()) {
+// LogStub.getInstance().logDebug(LOG, "RSP Request: " + body);
+// }
+//
+// HttpResponse result = new HttpRSPClient().clientSimpleRequest(body, rspServerUrl, ALLOCATE_PROFILE_PATH);
+//
+// if (result != null && !"".equals(result.getContent())) {
+// if (LogStub.getInstance().isDebugEnabled()) {
+// LogStub.getInstance().logDebug(LOG, "RSP Response: " + result);
+// }
+//
+// return getAllocateProfileResponse(result.getContent());
+// } else {
+// throw new RuntimeException("No profile could be allocated");
+// }
+// } catch (Exception e) {
+// LOG.log(Level.SEVERE, e.getMessage(), e);
+//
+// throw new RuntimeException("Unable to allocate profile with RSP Server");
+// }
+// }
+
+ private AllocateProfileResponse getAllocateProfileResponse(final String content) {
+ AllocateProfileResponse allocateProfileResponse = null;
+ String fixedContent = content != null ? (content.startsWith("$") ? content.substring(1) : content) : "";
+ String[] responseTokens = fixedContent.split("\\$");
+
+ if (responseTokens.length > 1) {
+ allocateProfileResponse = new AllocateProfileResponse();
+ allocateProfileResponse.setAcFormat(responseTokens[0]);
+ allocateProfileResponse.setSmDpPlusAddress(responseTokens[1]);
+ allocateProfileResponse.setAcToken(responseTokens.length > 2 ? responseTokens[2] : "");
+ allocateProfileResponse.setSmDpPlusOid(responseTokens.length > 3 ? responseTokens[3] : null);
+ allocateProfileResponse.setConfirmationCodeRequiredFlag(responseTokens.length > 4 ? responseTokens[4] : null);
+ }
+
+ return allocateProfileResponse;
+ }
+
+ private String toJsonString(final String msg) {
+ int index = msg.indexOf("{");
+
+ return msg.substring(index);
+ }
+}
\ No newline at end of file
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/HttpRSPClient.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/HttpRSPClient.java
new file mode 100644
index 0000000..8e0a3af
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/HttpRSPClient.java
@@ -0,0 +1,122 @@
+package com.truphone.es9plus;
+
+import com.truphone.util.LogStub;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.BufferedWriter;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Logger;
+
+public class HttpRSPClient {
+ private static final Logger LOG = Logger.getLogger(HttpRSPClient.class.getName());
+
+ public HttpResponse clientRSPRequest(final String body,
+ final String rspServerUrl,
+ final String url) throws Exception {
+
+ Pair contentType = new Pair<>("Content-Type", "application/json");
+ Pair accept = new Pair<>("Accept", "application/json");
+ Pair userAgent = new Pair<>("User-Agent", "gsma-rsp-com.truphone.lpad");
+ Pair xAdminProtocol = new Pair<>("X-Admin-Protocol", "gsma/rsp/v2.2.0");
+
+ return invoke("POST", body, rspServerUrl, url, Arrays.asList(contentType, accept, userAgent, xAdminProtocol));
+ }
+
+ public HttpResponse clientSimpleRequest(final String body,
+ final String rspServerUrl,
+ final String url) throws Exception {
+
+ Pair contentType = new Pair<>("Content-type", "application/x-www-form-urlencoded");
+ Pair userAgent = new Pair<>("User-Agent", "gsma-rsp-com.truphone.lpad");
+ Pair xAdminProtocol = new Pair<>("X-Admin-Protocol", "gsma/rsp/v2.2.0");
+
+
+ if (LogStub.getInstance().isDebugEnabled()) {
+ LogStub.getInstance().logDebug(LOG, LogStub.getInstance().getTag() + " - HttpRSPClient - clientSimpleRequest parameters - body : " +
+ body + " rspServerUrl:" + rspServerUrl + " contentType: " + contentType + " user agent: " + userAgent +
+ " xAdminProtocol: " + xAdminProtocol + " url: " + url);
+ }
+
+ return invoke("POST", body, rspServerUrl, url, Arrays.asList(contentType, userAgent, xAdminProtocol));
+ }
+
+ private HttpResponse invoke(final String method,
+ final String body,
+ final String rspServerUrl,
+ final String url,
+ final List> headers) throws Exception {
+
+ StringBuilder endpoint = new StringBuilder(rspServerUrl);
+ HttpResponse httpResponse = new HttpResponse();
+
+ if (StringUtils.isNotBlank(url)) {
+ endpoint.append(url);
+ }
+
+ if (LogStub.getInstance().isDebugEnabled()) {
+ LogStub.getInstance().logDebug(LOG, LogStub.getInstance().getTag() + " - HttpRSPClient - invoke URL: " + endpoint.toString());
+ }
+
+ URL urlResource = new URL(endpoint.toString());
+ HttpURLConnection con = (HttpURLConnection) urlResource.openConnection();
+
+ con.setDoInput(true);
+ con.setDoOutput(true);
+ con.setRequestMethod(method);
+ con.setConnectTimeout(600000);
+ con.setReadTimeout(600000);
+
+ if (headers != null) {
+ for (Pair header : headers) {
+ con.setRequestProperty(header.getKey(), header.getValue());
+ }
+ }
+
+ OutputStream os = con.getOutputStream();
+ BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
+
+ writer.write(body);
+ writer.flush();
+ writer.close();
+
+ os.close();
+
+ httpResponse.setStatusCode(con.getResponseCode());
+ httpResponse.setContent(IOUtils.toString(con.getInputStream(), StandardCharsets.UTF_8));
+
+ return httpResponse;
+ }
+
+ private class Pair {
+ private T key;
+ private E value;
+
+ public Pair(T key, E value) {
+ this.key = key;
+ this.value = value;
+ }
+
+ public T getKey() {
+ return key;
+ }
+
+ public void setKey(T key) {
+ this.key = key;
+ }
+
+ public E getValue() {
+ return value;
+ }
+
+ public void setValue(E value) {
+ this.value = value;
+ }
+ }
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/HttpResponse.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/HttpResponse.java
new file mode 100644
index 0000000..3d1872c
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/HttpResponse.java
@@ -0,0 +1,26 @@
+package com.truphone.es9plus;
+
+public class HttpResponse {
+ private String content;
+ private int statusCode;
+
+ public String getContent() {
+
+ return content;
+ }
+
+ public void setContent(String content) {
+
+ this.content = content;
+ }
+
+ public int getStatusCode() {
+
+ return statusCode;
+ }
+
+ public void setStatusCode(int statusCode) {
+
+ this.statusCode = statusCode;
+ }
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/LpaUtils.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/LpaUtils.java
new file mode 100644
index 0000000..145ed30
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/LpaUtils.java
@@ -0,0 +1,10 @@
+package com.truphone.es9plus;
+
+public class LpaUtils {
+ public static String generateCtxParams1() {
+
+ return "";
+ }
+
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/MsgBody.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/MsgBody.java
new file mode 100644
index 0000000..3f38f47
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/MsgBody.java
@@ -0,0 +1,4 @@
+package com.truphone.es9plus.message;
+
+public interface MsgBody {
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/MsgType.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/MsgType.java
new file mode 100644
index 0000000..774a39c
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/MsgType.java
@@ -0,0 +1,12 @@
+package com.truphone.es9plus.message;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface MsgType {
+ String value();
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/AuthenticateClientReq.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/AuthenticateClientReq.java
new file mode 100644
index 0000000..65ca04c
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/AuthenticateClientReq.java
@@ -0,0 +1,28 @@
+package com.truphone.es9plus.message.request;
+
+
+import com.truphone.es9plus.message.MsgType;
+import com.truphone.es9plus.message.request.base.RequestMsgBody;
+
+@MsgType("/gsma/rsp2/es9plus/authenticateClient")
+public class AuthenticateClientReq extends RequestMsgBody {
+ private String transactionId;
+ private String authenticateServerResponse;
+
+ public String getTransactionId() {
+ return transactionId;
+ }
+
+ public void setTransactionId(String transactionId) {
+ this.transactionId = transactionId;
+ }
+
+ public String getAuthenticateServerResponse() {
+ return authenticateServerResponse;
+ }
+
+ public void setAuthenticateServerResponse(String authenticateServerResponse) {
+ this.authenticateServerResponse = authenticateServerResponse;
+ }
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/CancelSessionReq.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/CancelSessionReq.java
new file mode 100644
index 0000000..b547e15
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/CancelSessionReq.java
@@ -0,0 +1,37 @@
+package com.truphone.es9plus.message.request;
+
+
+import com.truphone.es9plus.message.MsgType;
+import com.truphone.es9plus.message.request.base.RequestMsgBody;
+
+@MsgType("/gsma/rsp2/es9plus/cancelSession")
+public class CancelSessionReq extends RequestMsgBody {
+ private String transactionId;
+ private String euiccCancelSessionSigned;
+ private String euiccCancelSessionSignature;
+
+ public String getTransactionId() {
+ return transactionId;
+ }
+
+ public void setTransactionId(String transactionId) {
+ this.transactionId = transactionId;
+ }
+
+ public String getEuiccCancelSessionSigned() {
+ return euiccCancelSessionSigned;
+ }
+
+ public void setEuiccCancelSessionSigned(String euiccCancelSessionSigned) {
+ this.euiccCancelSessionSigned = euiccCancelSessionSigned;
+ }
+
+ public String getEuiccCancelSessionSignature() {
+ return euiccCancelSessionSignature;
+ }
+
+ public void setEuiccCancelSessionSignature(String euiccCancelSessionSignature) {
+ this.euiccCancelSessionSignature = euiccCancelSessionSignature;
+ }
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/ConfirmOrderReq.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/ConfirmOrderReq.java
new file mode 100644
index 0000000..a6d5461
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/ConfirmOrderReq.java
@@ -0,0 +1,53 @@
+package com.truphone.es9plus.message.request;
+
+
+import com.truphone.es9plus.message.MsgType;
+import com.truphone.es9plus.message.request.base.RequestMsgBody;
+
+@MsgType("/gsma/rsp2/es2plus/confirmOrder")
+public class ConfirmOrderReq extends RequestMsgBody {
+ private String iccid;
+ private String eid;
+ private String matchingId;
+ private String comfirmationCode;
+ private String smdsAddress;
+ private boolean releaseFlag;
+ public String getIccid() {
+ return iccid;
+ }
+ public void setIccid(String iccid) {
+ this.iccid = iccid;
+ }
+ public String getEid() {
+ return eid;
+ }
+ public void setEid(String eid) {
+ this.eid = eid;
+ }
+ public String getMatchingId() {
+ return matchingId;
+ }
+ public void setMatchingId(String matchingId) {
+ this.matchingId = matchingId;
+ }
+ public String getComfirmationCode() {
+ return comfirmationCode;
+ }
+ public void setComfirmationCode(String comfirmationCode) {
+ this.comfirmationCode = comfirmationCode;
+ }
+ public String getSmdsAddress() {
+ return smdsAddress;
+ }
+ public void setSmdsAddress(String smdsAddress) {
+ this.smdsAddress = smdsAddress;
+ }
+ public boolean getReleaseFlag() {
+ return releaseFlag;
+ }
+ public void setReleaseFlag(boolean releaseFlag) {
+ this.releaseFlag = releaseFlag;
+ }
+
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/DownloadOrderReq.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/DownloadOrderReq.java
new file mode 100644
index 0000000..e6382a7
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/DownloadOrderReq.java
@@ -0,0 +1,45 @@
+package com.truphone.es9plus.message.request;
+
+import com.truphone.es9plus.message.MsgType;
+import com.truphone.es9plus.message.request.base.RequestMsgBody;
+
+@MsgType("/gsma/rsp2/es2plus/downloadOrder")
+public class DownloadOrderReq extends RequestMsgBody {
+ private String eid;
+ private String iccid;
+ private String profileType;
+ private String msisdn;
+
+ public String getMsisdn() {
+ return msisdn;
+ }
+
+ public void setMsisdn(String msisdn) {
+ this.msisdn = msisdn;
+ }
+
+ public String getEid() {
+ return eid;
+ }
+
+ public void setEid(String eid) {
+ this.eid = eid;
+ }
+
+ public String getIccid() {
+ return iccid;
+ }
+
+ public void setIccid(String iccid) {
+ this.iccid = iccid;
+ }
+
+ public String getProfileType() {
+ return profileType;
+ }
+
+ public void setProfileType(String profileType) {
+ this.profileType = profileType;
+ }
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/GetBoundProfilePackageReq.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/GetBoundProfilePackageReq.java
new file mode 100644
index 0000000..d28f0b3
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/GetBoundProfilePackageReq.java
@@ -0,0 +1,28 @@
+package com.truphone.es9plus.message.request;
+
+
+import com.truphone.es9plus.message.MsgType;
+import com.truphone.es9plus.message.request.base.RequestMsgBody;
+
+@MsgType("/gsma/rsp2/es9plus/getBoundProfilePackage")
+public class GetBoundProfilePackageReq extends RequestMsgBody {
+ private String transactionId;
+ private String prepareDownloadResponse;
+
+ public String getTransactionId() {
+ return transactionId;
+ }
+
+ public void setTransactionId(String transactionId) {
+ this.transactionId = transactionId;
+ }
+
+ public String getPrepareDownloadResponse() {
+ return prepareDownloadResponse;
+ }
+
+ public void setPrepareDownloadResponse(String prepareDownloadResponse) {
+ this.prepareDownloadResponse = prepareDownloadResponse;
+ }
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/HandleDownloadProgressInfoReq.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/HandleDownloadProgressInfoReq.java
new file mode 100644
index 0000000..e2aa6ca
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/HandleDownloadProgressInfoReq.java
@@ -0,0 +1,74 @@
+package com.truphone.es9plus.message.request;
+
+import com.truphone.es9plus.message.MsgType;
+import com.truphone.es9plus.message.request.base.RequestMsgBody;
+
+import java.util.Date;
+
+@MsgType("/gsma/rsp2/es2plus/handleDownloadProgressInfo")
+public class HandleDownloadProgressInfoReq extends RequestMsgBody {
+ private String eid;
+ private String iccid;
+ private String profileType;
+ private Date timestamp;
+ private int notificationPointId;
+ private String notificationPointStatus;
+ private String resultData;
+
+ public String getEid() {
+ return eid;
+ }
+
+ public void setEid(String eid) {
+ this.eid = eid;
+ }
+
+ public String getIccid() {
+ return iccid;
+ }
+
+ public void setIccid(String iccid) {
+ this.iccid = iccid;
+ }
+
+ public String getProfileType() {
+ return profileType;
+ }
+
+ public void setProfileType(String profileType) {
+ this.profileType = profileType;
+ }
+
+ public Date getTimestamp() {
+ return timestamp;
+ }
+
+ public void setTimestamp(Date timestamp) {
+ this.timestamp = timestamp;
+ }
+
+ public int getNotificationPointId() {
+ return notificationPointId;
+ }
+
+ public void setNotificationPointId(int notificationPointId) {
+ this.notificationPointId = notificationPointId;
+ }
+
+ public String getNotificationPointStatus() {
+ return notificationPointStatus;
+ }
+
+ public void setNotificationPointStatus(String notificationPointStatus) {
+ this.notificationPointStatus = notificationPointStatus;
+ }
+
+ public String getResultData() {
+ return resultData;
+ }
+
+ public void setResultData(String resultData) {
+ this.resultData = resultData;
+ }
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/HandleNotificationReq.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/HandleNotificationReq.java
new file mode 100644
index 0000000..e015fa8
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/HandleNotificationReq.java
@@ -0,0 +1,19 @@
+package com.truphone.es9plus.message.request;
+
+
+import com.truphone.es9plus.message.MsgType;
+import com.truphone.es9plus.message.request.base.RequestMsgBody;
+
+@MsgType("/gsma/rsp2/es9plus/handleNotification")
+public class HandleNotificationReq extends RequestMsgBody {
+ private String pendingNotification;
+
+ public String getPendingNotification() {
+ return pendingNotification;
+ }
+
+ public void setPendingNotification(String pendingNotification) {
+ this.pendingNotification = pendingNotification;
+ }
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/InitiateAuthenticationReq.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/InitiateAuthenticationReq.java
new file mode 100644
index 0000000..19aaead
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/InitiateAuthenticationReq.java
@@ -0,0 +1,37 @@
+package com.truphone.es9plus.message.request;
+
+
+import com.truphone.es9plus.message.MsgType;
+import com.truphone.es9plus.message.request.base.RequestMsgBody;
+
+@MsgType("/gsma/rsp2/es9plus/initiateAuthentication")
+public class InitiateAuthenticationReq extends RequestMsgBody {
+ private String euiccChallenge;
+ private String euiccInfo1;
+ private String smdpAddress;
+
+ public String getEuiccChallenge() {
+ return euiccChallenge;
+ }
+
+ public void setEuiccChallenge(String euiccChallenge) {
+ this.euiccChallenge = euiccChallenge;
+ }
+
+ public String getEuiccInfo1() {
+ return euiccInfo1;
+ }
+
+ public void setEuiccInfo1(String euiccInfo1) {
+ this.euiccInfo1 = euiccInfo1;
+ }
+
+ public String getSmdpAddress() {
+ return smdpAddress;
+ }
+
+ public void setSmdpAddress(String smdpAddress) {
+ this.smdpAddress = smdpAddress;
+ }
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/ReleaseProfileReq.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/ReleaseProfileReq.java
new file mode 100644
index 0000000..72e507f
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/ReleaseProfileReq.java
@@ -0,0 +1,19 @@
+package com.truphone.es9plus.message.request;
+
+
+import com.truphone.es9plus.message.MsgType;
+import com.truphone.es9plus.message.request.base.RequestMsgBody;
+
+@MsgType("/gsma/rsp2/es2plus/releaseProfile")
+public class ReleaseProfileReq extends RequestMsgBody {
+ private String iccid;
+
+ public String getIccid() {
+ return iccid;
+ }
+
+ public void setIccid(String iccid) {
+ this.iccid = iccid;
+ }
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/base/RequestMsgBody.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/base/RequestMsgBody.java
new file mode 100644
index 0000000..f42325c
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/request/base/RequestMsgBody.java
@@ -0,0 +1,12 @@
+package com.truphone.es9plus.message.request.base;
+
+
+import com.truphone.es9plus.message.MsgBody;
+
+import java.security.InvalidParameterException;
+
+public abstract class RequestMsgBody implements MsgBody {
+
+ public void checkParameters() throws InvalidParameterException {
+ }
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/AuthenticateClientResp.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/AuthenticateClientResp.java
new file mode 100644
index 0000000..73af4b5
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/AuthenticateClientResp.java
@@ -0,0 +1,63 @@
+package com.truphone.es9plus.message.response;
+
+
+import com.truphone.es9plus.message.response.base.ResponseMsgBody;
+
+public class AuthenticateClientResp extends ResponseMsgBody {
+ private String transactionID;
+ private String profileMetadata;
+ private String smdpSigned2;
+ private String smdpSignature2;
+ private String smdpCertificate;
+
+ public String getTransactionID() {
+ return transactionID;
+ }
+
+ public void setTransactionID(String transactionID) {
+ this.transactionID = transactionID;
+ }
+
+ public String getProfileMetadata() {
+ return profileMetadata;
+ }
+
+ public void setProfileMetadata(String profileMetadata) {
+ this.profileMetadata = profileMetadata;
+ }
+
+ public String getSmdpSigned2() {
+ return smdpSigned2;
+ }
+
+ public void setSmdpSigned2(String smdpSigned2) {
+ this.smdpSigned2 = smdpSigned2;
+ }
+
+ public String getSmdpSignature2() {
+ return smdpSignature2;
+ }
+
+ public void setSmdpSignature2(String smdpSignature2) {
+ this.smdpSignature2 = smdpSignature2;
+ }
+
+ public String getSmdpCertificate() {
+ return smdpCertificate;
+ }
+
+ public void setSmdpCertificate(String smdpCertificate) {
+ this.smdpCertificate = smdpCertificate;
+ }
+
+ @Override
+ public String toString() {
+ return "AuthenticateClientResp{" +
+ "transactionID='" + transactionID + '\'' +
+ ", profileMetadata='" + profileMetadata + '\'' +
+ ", smdpSigned2='" + smdpSigned2 + '\'' +
+ ", smdpSignature2='" + smdpSignature2 + '\'' +
+ ", smdpCertificate='" + smdpCertificate + '\'' +
+ '}';
+ }
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/CancelSessionResp.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/CancelSessionResp.java
new file mode 100644
index 0000000..b715aba
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/CancelSessionResp.java
@@ -0,0 +1,8 @@
+package com.truphone.es9plus.message.response;
+
+
+import com.truphone.es9plus.message.response.base.ResponseMsgBody;
+
+public class CancelSessionResp extends ResponseMsgBody {
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/ConfirmOrderResp.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/ConfirmOrderResp.java
new file mode 100644
index 0000000..d884fa6
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/ConfirmOrderResp.java
@@ -0,0 +1,34 @@
+package com.truphone.es9plus.message.response;
+
+import com.truphone.es9plus.message.response.base.ResponseMsgBody;
+
+public class ConfirmOrderResp extends ResponseMsgBody {
+ private String eid;
+ private String matchingId;
+ private String smdpAddress;
+
+ public String getEid() {
+ return eid;
+ }
+
+ public void setEid(String eid) {
+ this.eid = eid;
+ }
+
+ public String getMatchingId() {
+ return matchingId;
+ }
+
+ public void setMatchingId(String matchingId) {
+ this.matchingId = matchingId;
+ }
+
+ public String getSmdpAddress() {
+ return smdpAddress;
+ }
+
+ public void setSmdpAddress(String smdpAddress) {
+ this.smdpAddress = smdpAddress;
+ }
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/DownloadOrderResp.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/DownloadOrderResp.java
new file mode 100644
index 0000000..a3057c4
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/DownloadOrderResp.java
@@ -0,0 +1,17 @@
+package com.truphone.es9plus.message.response;
+
+import com.truphone.es9plus.message.response.base.ResponseMsgBody;
+
+public class DownloadOrderResp extends ResponseMsgBody {
+ private String iccid;
+
+ public String getIccid() {
+ return iccid;
+ }
+
+ public void setIccid(String iccid) {
+ this.iccid = iccid;
+ }
+
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/GetBoundProfilePackageResp.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/GetBoundProfilePackageResp.java
new file mode 100644
index 0000000..2e47fa5
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/GetBoundProfilePackageResp.java
@@ -0,0 +1,26 @@
+package com.truphone.es9plus.message.response;
+
+
+import com.truphone.es9plus.message.response.base.ResponseMsgBody;
+
+public class GetBoundProfilePackageResp extends ResponseMsgBody {
+ private String transactionID;
+ private String boundProfilePackage;
+
+ public String getTransactionID() {
+ return transactionID;
+ }
+
+ public void setTransactionID(String transactionID) {
+ this.transactionID = transactionID;
+ }
+
+ public String getBoundProfilePackage() {
+ return boundProfilePackage;
+ }
+
+ public void setBoundProfilePackage(String boundProfilePackage) {
+ this.boundProfilePackage = boundProfilePackage;
+ }
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/HandleDownloadProgressInfoResp.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/HandleDownloadProgressInfoResp.java
new file mode 100644
index 0000000..cc92181
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/HandleDownloadProgressInfoResp.java
@@ -0,0 +1,8 @@
+package com.truphone.es9plus.message.response;
+
+
+import com.truphone.es9plus.message.response.base.ResponseMsgBody;
+
+public class HandleDownloadProgressInfoResp extends ResponseMsgBody {
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/HandleNotificationResp.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/HandleNotificationResp.java
new file mode 100644
index 0000000..8446a4b
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/HandleNotificationResp.java
@@ -0,0 +1,8 @@
+package com.truphone.es9plus.message.response;
+
+
+import com.truphone.es9plus.message.response.base.ResponseMsgBody;
+
+public class HandleNotificationResp extends ResponseMsgBody {
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/InitiateAuthenticationResp.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/InitiateAuthenticationResp.java
new file mode 100644
index 0000000..b99df20
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/InitiateAuthenticationResp.java
@@ -0,0 +1,64 @@
+package com.truphone.es9plus.message.response;
+
+
+import com.truphone.es9plus.message.response.base.ResponseMsgBody;
+
+public class InitiateAuthenticationResp extends ResponseMsgBody {
+ private String transactionId;
+ private String serverSigned1;
+ private String serverSignature1;
+ private String euiccCiPKIdToBeUsed;
+ private String serverCertificate;
+
+ public String getTransactionId() {
+ return transactionId;
+ }
+
+ public void setTransactionId(String transactionId) {
+ this.transactionId = transactionId;
+ }
+
+ public String getServerSigned1() {
+ return serverSigned1;
+ }
+
+ public void setServerSigned1(String serverSigned1) {
+ this.serverSigned1 = serverSigned1;
+ }
+
+ public String getServerSignature1() {
+ return serverSignature1;
+ }
+
+ public void setServerSignature1(String serverSignature1) {
+ this.serverSignature1 = serverSignature1;
+ }
+
+ public String getEuiccCiPKIdToBeUsed() {
+ return euiccCiPKIdToBeUsed;
+ }
+
+ public void setEuiccCiPKIdToBeUsed(String euiccCiPKIdToBeUsed) {
+ this.euiccCiPKIdToBeUsed = euiccCiPKIdToBeUsed;
+ }
+
+ public String getServerCertificate() {
+ return serverCertificate;
+ }
+
+ public void setServerCertificate(String serverCertificate) {
+ this.serverCertificate = serverCertificate;
+ }
+
+ @Override
+ public String toString() {
+
+ return "InitiateAuthenticationResp{" +
+ "transactionId='" + transactionId + '\'' +
+ ", serverSigned1='" + serverSigned1 + '\'' +
+ ", serverSignature1='" + serverSignature1 + '\'' +
+ ", euiccCiPKIdToBeUsed='" + euiccCiPKIdToBeUsed + '\'' +
+ ", serverCertificate='" + serverCertificate + '\'' +
+ '}';
+ }
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/ReleaseProfileResp.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/ReleaseProfileResp.java
new file mode 100644
index 0000000..cd1d3c1
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/ReleaseProfileResp.java
@@ -0,0 +1,8 @@
+package com.truphone.es9plus.message.response;
+
+
+import com.truphone.es9plus.message.response.base.ResponseMsgBody;
+
+public class ReleaseProfileResp extends ResponseMsgBody {
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/base/FunctionExecutionStatus.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/base/FunctionExecutionStatus.java
new file mode 100644
index 0000000..efb65d8
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/base/FunctionExecutionStatus.java
@@ -0,0 +1,33 @@
+package com.truphone.es9plus.message.response.base;
+
+public class FunctionExecutionStatus {
+ private String status;
+ private StatusCodeData statusCodeData;
+
+ public FunctionExecutionStatus(String status) {
+ super();
+ this.status = status;
+ }
+
+ public FunctionExecutionStatus(String status, StatusCodeData statusCodeData) {
+ super();
+ this.status = status;
+ this.statusCodeData = statusCodeData;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ public StatusCodeData getStatusCodeData() {
+ return statusCodeData;
+ }
+
+ public void setStatusCodeData(StatusCodeData statusCodeData) {
+ this.statusCodeData = statusCodeData;
+ }
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/base/HeaderResp.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/base/HeaderResp.java
new file mode 100644
index 0000000..a53a1da
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/base/HeaderResp.java
@@ -0,0 +1,19 @@
+package com.truphone.es9plus.message.response.base;
+
+public class HeaderResp {
+ private FunctionExecutionStatus functionExecutionStatus;
+
+ public HeaderResp(FunctionExecutionStatus functionExecutionStatus) {
+ super();
+ this.functionExecutionStatus = functionExecutionStatus;
+ }
+
+ public FunctionExecutionStatus getFunctionExecutionStatus() {
+ return functionExecutionStatus;
+ }
+
+ public void setFunctionExecutionStatus(FunctionExecutionStatus functionExecutionStatus) {
+ this.functionExecutionStatus = functionExecutionStatus;
+ }
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/base/NotificationPointStatus.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/base/NotificationPointStatus.java
new file mode 100644
index 0000000..7541248
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/base/NotificationPointStatus.java
@@ -0,0 +1,24 @@
+package com.truphone.es9plus.message.response.base;
+
+public class NotificationPointStatus {
+
+ private String status;
+
+ private StatusCodeData statusCodeData;
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ public StatusCodeData getStatusCodeData() {
+ return statusCodeData;
+ }
+
+ public void setStatusCodeData(StatusCodeData statusCodeData) {
+ this.statusCodeData = statusCodeData;
+ }
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/base/ResponseMsgBody.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/base/ResponseMsgBody.java
new file mode 100644
index 0000000..8be1439
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/base/ResponseMsgBody.java
@@ -0,0 +1,16 @@
+package com.truphone.es9plus.message.response.base;
+
+import com.truphone.es9plus.message.MsgBody;
+
+public abstract class ResponseMsgBody implements MsgBody {
+ private HeaderResp header;
+
+ public HeaderResp getHeader() {
+ return header;
+ }
+
+ public void setHeader(HeaderResp header) {
+ this.header = header;
+ }
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/base/StatusCodeData.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/base/StatusCodeData.java
new file mode 100644
index 0000000..cc706d4
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/es9plus/message/response/base/StatusCodeData.java
@@ -0,0 +1,64 @@
+package com.truphone.es9plus.message.response.base;
+
+public class StatusCodeData {
+
+ private String subjectCode;
+
+ private String reasonCode;
+
+ private String message;
+
+ private String subjectIdentifier;
+
+ public StatusCodeData() {
+ super();
+ }
+
+ public StatusCodeData(String subjectCode, String reasonCode, String message) {
+ super();
+ this.subjectCode = subjectCode;
+ this.reasonCode = reasonCode;
+ this.message = message;
+ }
+
+ public StatusCodeData(String subjectCode, String reasonCode, String message, String subjectIdentifier) {
+ super();
+ this.subjectCode = subjectCode;
+ this.reasonCode = reasonCode;
+ this.message = message;
+ this.subjectIdentifier = subjectIdentifier;
+ }
+
+ public String getSubjectCode() {
+ return subjectCode;
+ }
+
+ public void setSubjectCode(String subjectCode) {
+ this.subjectCode = subjectCode;
+ }
+
+ public String getReasonCode() {
+ return reasonCode;
+ }
+
+ public void setReasonCode(String reasonCode) {
+ this.reasonCode = reasonCode;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public String getSubjectIdentifier() {
+ return subjectIdentifier;
+ }
+
+ public void setSubjectIdentifier(String subjectIdentifier) {
+ this.subjectIdentifier = subjectIdentifier;
+ }
+
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/lpa/ApduChannel.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/lpa/ApduChannel.java
new file mode 100644
index 0000000..dc96521
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/lpa/ApduChannel.java
@@ -0,0 +1,15 @@
+package com.truphone.lpa;
+
+import java.util.List;
+
+public interface ApduChannel {
+ String transmitAPDU(String apdu);
+
+ String transmitAPDUS(List apdus);
+
+ void sendStatus();
+
+ void setApduTransmittedListener(ApduTransmittedListener apduTransmittedListener);
+
+ void removeApduTransmittedListener(ApduTransmittedListener apduTransmittedListener);
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/lpa/ApduTransmittedListener.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/lpa/ApduTransmittedListener.java
new file mode 100644
index 0000000..c9db6c5
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/lpa/ApduTransmittedListener.java
@@ -0,0 +1,5 @@
+package com.truphone.lpa;
+
+public interface ApduTransmittedListener {
+ void onApduTransmitted();
+}
diff --git a/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/lpa/LocalProfileAssistant.java b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/lpa/LocalProfileAssistant.java
new file mode 100644
index 0000000..f61a7c3
--- /dev/null
+++ b/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/lpa/LocalProfileAssistant.java
@@ -0,0 +1,40 @@
+package com.truphone.lpa;
+
+import com.truphone.lpa.progress.DownloadProgress;
+import com.truphone.lpad.progress.Progress;
+
+import java.util.List;
+import java.util.Map;
+
+public interface LocalProfileAssistant {
+
+ String enableProfile(String iccid, Progress progress);
+
+ String disableProfile(String iccid, Progress progress);
+
+ String deleteProfile(String iccid, Progress progress);
+
+ String getDefaultSMDP();
+
+ String setDefaultSMDP(String smdpAddress, Progress progress);
+
+
+ void downloadProfile(String matchingId, DownloadProgress progress) throws Exception;
+
+ List