/*******************************************************************************
* Copyright (c) 2011, 2016 Eurotech and/or its affiliates
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eurotech
*******************************************************************************/
package org.eclipse.kura.net.modem;
import org.eclipse.kura.net.IPAddress;
import org.eclipse.kura.net.NetConfig;
/**
* Modem configuration representation
*
*/
public class ModemConfig implements NetConfig {
/**
* Configuration for a cellular modem.
*/
public static enum PdpType {
IP, PPP, IPv6, UNKNOWN
};
public static enum AuthType {
NONE, AUTO, PAP, CHAP
};
private boolean m_enabled = false;
private String m_dialString = "";
private int m_pppNumber = 0;
private int m_profileID = 0;
private PdpType m_pdpType = PdpType.IP;
private AuthType m_authType = AuthType.NONE;
private String m_apn = "";
private String m_username = "";
private String m_password = "";
private boolean m_persist = false;
private int m_maxFail = 0;
private int m_idle = 0;
private String m_activeFilter = "";
private int m_lcpEchoInterval = 0;
private int m_lcpEchoFailure = 0;
private IPAddress m_ipAddress = null;
private int m_dataCompression = 0; // FIXME: change to enum?
private int m_headerCompression = 0; // FIXME: change to enum?
private boolean m_gpsEnabled = false;
private int m_resetTimeout = 0;
/**
* Empty constructor
*/
public ModemConfig() {
}
/**
* PDP config constructor
*
* @param apn
* - access point name as {@link String}
* @param ipAddress
* - IP address as {@link String}
* @param profileID
* - PDP profile ID as {@link int}
* @param pdpType
* - PDP type as {@link PdpType}
* @param dataCompression
* - PDP data compression as {@link int}
* @param headerCompresion
* - PDP header compression as {@link int}
*/
public ModemConfig(int profileID, PdpType pdpType, String apn, IPAddress ipAddress, int dataCompression,
int headerCompresion) {
this.m_profileID = profileID;
this.m_pdpType = pdpType;
this.m_apn = apn;
this.m_ipAddress = ipAddress;
this.m_dataCompression = dataCompression;
this.m_headerCompression = headerCompresion;
}
/**
* Reports whether it is enabled.
*
* @return is enabled as {@link boolean}
*/
public boolean isEnabled() {
return this.m_enabled;
}
/**
* Sets the enabled setting.
*
* @param enabled
* - enabled status as {@link boolean}
*/
public void setEnabled(boolean enabled) {
this.m_enabled = enabled;
}
/**
* Gets the dial string.
*
* @return dial string as {@link String}
*/
public String getDialString() {
return this.m_dialString;
}
/**
* Sets the dial string.
*
* @param dialString
* - dial string as {@link String}
*/
public void setDialString(String dialString) {
this.m_dialString = dialString;
}
/**
* Reports authentication type.
*
* @return authentication type as {@link AuthType}
*/
public AuthType getAuthType() {
return this.m_authType;
}
/**
* Sets authentication type.
*
* @param authType
* - authentication type as {@link AuthType}
*/
public void setAuthType(AuthType authType) {
this.m_authType = authType;
}
/**
* Reports user name.
*
* @return user name as {@link String}
*/
public String getUsername() {
return this.m_username;
}
/**
* Sets user name.
*
* @param username
* - user name as {@link String}
*/
public void setUsername(String username) {
this.m_username = username;
}
/**
* Reports password.
*
* @return password as {@link String}
*/
public String getPassword() {
return this.m_password;
}
/**
* Sets password.
*
* @param password
* - password as {@link String}
*/
public void setPassword(String password) {
this.m_password = password;
}
/**
* Reports if pppd is instructed to exit after a connection is terminated.
*
* @return 'persist' flag {@link boolean}
*/
public boolean isPersist() {
return this.m_persist;
}
/**
* Sets 'persist' flag to instruct pppd if it needs to exit after a connection is terminated.
*
* @param persist
* as {@link boolean}
*/
public void setPersist(boolean persist) {
this.m_persist = persist;
}
/**
* Reports maximum number of failed connection attempts.
*
* @return maximum number of failed connection attempts as {@link int}
*/
public int getMaxFail() {
return this.m_maxFail;
}
/**
* Sets maximum number of failed connection attempts
*
* @param maxFail
* - maximum number of failed connection attempts as {@link int}
*/
public void setMaxFail(int maxFail) {
this.m_maxFail = maxFail;
}
/**
* Reports value of the 'idle' option.
* The 'idle' option specifies that pppd should disconnect if the link is idle for n seconds.
*
* @return value of the 'idle' option as {@link int}
*/
public int getIdle() {
return this.m_idle;
}
/**
* Sets value of the 'idle' option.
* The 'idle' option specifies that pppd should disconnect if the link is idle for n seconds.
*
* @param idle
*/
public void setIdle(int idle) {
this.m_idle = idle;
}
/**
* Reports the value of the 'active-filter' option that specifies a packet filter to be
* applied to data packets to determine which packets are to be regarded as link activity.
*
* @return value of the 'active-filter' option as {@link String}
*/
public String getActiveFilter() {
return this.m_activeFilter;
}
/**
* Sets the value of the 'active-filter' option that specifies a packet filter to be
* applied to data packets to determine which packets are to be regarded as link activity.
*
* @param activeFilter
* - active filter as {@link String}
*/
public void setActiveFilter(String activeFilter) {
this.m_activeFilter = activeFilter;
}
/**
* Reports LCP echo interval
*
* @return LCP echo interval (in sec) as {@link int}
*/
public int getLcpEchoInterval() {
return this.m_lcpEchoInterval;
}
/**
* Sets LCP echo interval
*
* @param lcpEchoInterval
* - LCP Echo interval as {@link int}
*/
public void setLcpEchoInterval(int lcpEchoInterval) {
this.m_lcpEchoInterval = lcpEchoInterval;
}
/**
* Reports number of failed LCP echo requests
*
* @return number of failed LCP echo requests as {@link int}
*/
public int getLcpEchoFailure() {
return this.m_lcpEchoFailure;
}
/**
* Sets number of failed LCP echo requests
* (unacknowledged LCP echo requests to be sent for pppd to presume the peer to be dead)
*
* @param lcpEchoFailure
*/
public void setLcpEchoFailure(int lcpEchoFailure) {
this.m_lcpEchoFailure = lcpEchoFailure;
}
/**
* Reports PPP number (i.e. '0' for ppp0).
*
* @return PPP number as {@link int}
*/
public int getPppNumber() {
return this.m_pppNumber;
}
/**
* Sets PPP number (i.e. '0' for ppp0).
*
* @param pppNumber
* - PPP number as {@link int}
*/
public void setPppNumber(int pppNumber) {
this.m_pppNumber = pppNumber;
}
/**
* Reports PDP profile ID.
*
* @return PDP profile ID as {@link int}
*/
public int getProfileID() {
return this.m_profileID;
}
/**
* Sets PDP profile ID.
*
* @param id
* - PDP profile ID as {@link int}
*/
public void setProfileID(int id) {
this.m_profileID = id;
}
/**
* Reports PDP type.
*
* @return PDP type as {@link PdpType}
*/
public PdpType getPdpType() {
return this.m_pdpType;
}
/**
* Sets PDP type.
*
* @param pdpType
* - PDP type as {@link PdpType}
*/
public void setPdpType(PdpType pdpType) {
this.m_pdpType = pdpType;
}
/**
* Reports access point name.
*
* @return access point name as {@link String}
*/
public String getApn() {
return this.m_apn;
}
/**
* Sets access point name.
*
* @param apn
* - access point name as {@link String}
*/
public void setApn(String apn) {
this.m_apn = apn;
}
/**
* Reports PDP IP address.
*
* @return IP address as {@link IPAddress}
*/
public IPAddress getIpAddress() {
return this.m_ipAddress;
}
/**
* Sets PDP IP address.
*
* @param address
* - IP address as {@link IPAddress}
*/
public void setIpAddress(IPAddress address) {
this.m_ipAddress = address;
}
/**
* Reports a value of numeric parameter that supports PDP data compression.
*
* @return PDP data compression as {@link int}
*/
public int getDataCompression() {
return this.m_dataCompression;
}
/**
* Sets a value of numeric parameter that supports PDP data compression.
*
* @param dataCompression
* - PDP data compression as {@link int}
*/
public void setDataCompression(int dataCompression) {
this.m_dataCompression = dataCompression;
}
/**
* Reports a value of numeric parameter that supports PDP header compression.
*
* @return PDP header compression as {@link int}
*/
public int getHeaderCompression() {
return this.m_headerCompression;
}
/**
* Sets a value of numeric parameter that supports PDP header compression.
*
* @param headerCompression
* headerCompression PDP header compression as {@link int}
*/
public void setHeaderCompression(int headerCompression) {
this.m_headerCompression = headerCompression;
}
/**
* Reports if PDP data compression is enabled.
*
* @return {@link boolean}
*/
public boolean isDataCompression() {
return this.m_dataCompression == 0 ? false : true;
}
/**
* Reports if PDP header compression is enabled.
*
* @return {@link boolean}
*/
public boolean isHeaderCompression() {
return this.m_headerCompression == 0 ? false : true;
}
public boolean isGpsEnabled() {
return this.m_gpsEnabled;
}
public int getResetTimeout() {
return this.m_resetTimeout;
}
public void setResetTimeout(int tout) {
this.m_resetTimeout = tout;
}
public void setGpsEnabled(boolean gpsEnabled) {
this.m_gpsEnabled = gpsEnabled;
}
@Override
public int hashCode() {
final int prime = 59;
int result = super.hashCode();
result = prime * result + this.m_profileID;
result = prime * result + (this.m_pdpType == null ? 0 : this.m_pdpType.hashCode());
result = prime * result + (this.m_authType == null ? 0 : this.m_authType.hashCode());
result = prime * result + (this.m_apn == null ? 0 : this.m_apn.hashCode());
result = prime * result + (this.m_username == null ? 0 : this.m_username.hashCode());
result = prime * result + (this.m_password == null ? 0 : this.m_password.hashCode());
result = prime * result + (this.m_ipAddress == null ? 0 : this.m_ipAddress.hashCode());
result = prime * result + this.m_pppNumber;
result = prime * result + this.m_maxFail;
result = prime * result + this.m_resetTimeout;
result = prime * result + this.m_idle;
result = prime * result + (this.m_activeFilter == null ? 0 : this.m_activeFilter.hashCode());
result = prime * result + this.m_lcpEchoFailure;
result = prime * result + this.m_lcpEchoInterval;
result = prime * result + this.m_dataCompression;
result = prime * result + this.m_headerCompression;
result = prime * result + (this.m_persist ? 1 : 0);
result = prime * result + (this.m_gpsEnabled ? 1 : 0);
return result;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof ModemConfig)) {
return false;
}
ModemConfig otherConfig = (ModemConfig) obj;
if (this.m_enabled != otherConfig.isEnabled()) {
return false;
}
if (this.m_pppNumber != otherConfig.getPppNumber()) {
return false;
}
if (this.m_persist != otherConfig.isPersist()) {
return false;
}
if (this.m_maxFail != otherConfig.getMaxFail()) {
return false;
}
if (this.m_resetTimeout != otherConfig.getResetTimeout()) {
return false;
}
if (this.m_idle != otherConfig.getIdle()) {
return false;
}
if (this.m_lcpEchoInterval != otherConfig.getLcpEchoInterval()) {
return false;
}
if (this.m_lcpEchoFailure != otherConfig.getLcpEchoFailure()) {
return false;
}
if (this.m_profileID != otherConfig.getProfileID()) {
return false;
}
if (this.m_pdpType != otherConfig.getPdpType()) {
return false;
}
if (this.m_authType != otherConfig.getAuthType()) {
return false;
}
if (this.m_dataCompression != otherConfig.getDataCompression()) {
return false;
}
if (this.m_headerCompression != otherConfig.getHeaderCompression()) {
return false;
}
if (this.m_gpsEnabled != otherConfig.isGpsEnabled()) {
return false;
}
if (this.m_dialString != null) {
if (!this.m_dialString.equals(otherConfig.getDialString())) {
return false;
}
} else {
if (otherConfig.getDialString() != null) {
return false;
}
}
if (this.m_apn != null) {
if (!this.m_apn.equals(otherConfig.getApn())) {
return false;
}
} else {
if (otherConfig.getApn() != null) {
return false;
}
}
if (this.m_username != null && this.m_username.length() > 0) {
if (!this.m_username.equals(otherConfig.getUsername())) {
return false;
}
} else {
if (otherConfig.getUsername() != null && otherConfig.getUsername().length() > 0) {
return false;
}
}
if (this.m_password != null && this.m_password.length() > 0) {
if (!this.m_password.equals(otherConfig.getPassword())) {
return false;
}
} else {
if (otherConfig.getPassword() != null && otherConfig.getPassword().length() > 0) {
return false;
}
}
if (this.m_activeFilter != null && this.m_activeFilter.length() > 0) {
if (!this.m_activeFilter.equals(otherConfig.getActiveFilter())) {
return false;
}
} else {
if (otherConfig.getActiveFilter() != null && otherConfig.getActiveFilter().length() > 0) {
return false;
}
}
if (this.m_ipAddress != null) {
if (!this.m_ipAddress.equals(otherConfig)) {
return false;
}
} else {
if (otherConfig.getIpAddress() != null) {
return false;
}
}
return true;
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append(super.toString());
sb.append("ModemConfig - ");
sb.append("Enabled: ").append(this.m_enabled);
sb.append(" - PPP Number: ").append(this.m_pppNumber);
sb.append(" - Dial String: ").append(this.m_dialString);
// sb.append(" - Provider: ").append(m_provider);
sb.append(" - Profile ID: ").append(this.m_profileID);
sb.append(" - PDP Type: ").append(this.m_pdpType);
sb.append(" - Auth Type: ").append(this.m_authType);
sb.append(" - APN: ").append(this.m_apn);
sb.append(" - Username: ").append(this.m_username);
sb.append(" - Password: ").append(this.m_password);
sb.append(" - IP Address: ").append(this.m_ipAddress == null ? "null" : this.m_ipAddress.getHostAddress());
sb.append(" - Data Compression: ").append(this.m_dataCompression);
sb.append(" - Header Compression: ").append(this.m_headerCompression);
return sb.toString();
}
@Override
public boolean isValid() {
if (this.m_pppNumber < 0) {
return false;
}
return true;
}
}