Skip to content
Snippets Groups Projects
Commit fe2155aa authored by Dany YARAKOU's avatar Dany YARAKOU Committed by Alexandre Lision
Browse files

Add IAX capabilities

Enables IAX account creation in app
Calls have not been tested yet
parent ea281db2
Branches
Tags
No related merge requests found
...@@ -9,6 +9,13 @@ ...@@ -9,6 +9,13 @@
style="@style/AccountFormContainer" style="@style/AccountFormContainer"
android:orientation="vertical" > android:orientation="vertical" >
<Spinner
android:id="@+id/account_type"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/accountType"
android:typeface="monospace" />
<EditText <EditText
android:id="@+id/alias" android:id="@+id/alias"
android:layout_width="match_parent" android:layout_width="match_parent"
......
...@@ -78,6 +78,7 @@ as that of the covered work. ...@@ -78,6 +78,7 @@ as that of the covered work.
<!-- Home Fragment --> <!-- Home Fragment -->
<plurals name="home_conferences_title"> <plurals name="home_conferences_title">
<item quantity="zero">No Conversation</item> <item quantity="zero">No Conversation</item>
<item quantity="one">%d Conversation</item>
<item quantity="other">%d Conversations</item> <item quantity="other">%d Conversations</item>
</plurals> </plurals>
<string name="home_transfering">Transfert de %1$s à %1$s</string> <string name="home_transfering">Transfert de %1$s à %1$s</string>
...@@ -111,4 +112,10 @@ as that of the covered work. ...@@ -111,4 +112,10 @@ as that of the covered work.
<string name="web_site">Site web</string> <string name="web_site">Site web</string>
<string name="help_gestures"> This view will help users with different interactions during calls. Different actions will be described; Long press, fling, swype etc.</string> <string name="help_gestures"> This view will help users with different interactions during calls. Different actions will be described; Long press, fling, swype etc.</string>
<!-- combobox protocole -->
<string-array name="accountType">
<item>SIP</item>
<item>IAX</item>
</string-array>
</resources> </resources>
...@@ -59,6 +59,7 @@ as that of the covered work. ...@@ -59,6 +59,7 @@ as that of the covered work.
<string name="account_proxy_field">Proxy</string> <string name="account_proxy_field">Proxy</string>
<string name="account_autoanswer_label">Décroche automatiquement l\'appel</string> <string name="account_autoanswer_label">Décroche automatiquement l\'appel</string>
<string name="show_password">Voir mot de passe</string> <string name="show_password">Voir mot de passe</string>
<string name="account_type_label">Protocole</string>
<!-- Audio Details --> <!-- Audio Details -->
<string name="account_preferences_audio_tab">Audio</string> <string name="account_preferences_audio_tab">Audio</string>
......
...@@ -113,4 +113,10 @@ as that of the covered work. ...@@ -113,4 +113,10 @@ as that of the covered work.
<string name="web_site">Website</string> <string name="web_site">Website</string>
<string name="help_gestures"> This view will help users with different interactions during calls. Different actions will be described; Long press, fling, swype etc.</string> <string name="help_gestures"> This view will help users with different interactions during calls. Different actions will be described; Long press, fling, swype etc.</string>
<!-- combobox protocol -->
<string-array name="accountType">
<item>SIP</item>
<item>IAX</item>
</string-array>
</resources> </resources>
...@@ -59,6 +59,7 @@ as that of the covered work. ...@@ -59,6 +59,7 @@ as that of the covered work.
<string name="account_autoanswer_label">Auto Answer</string> <string name="account_autoanswer_label">Auto Answer</string>
<string name="account_proxy_field">Proxy</string> <string name="account_proxy_field">Proxy</string>
<string name="show_password">Show password</string> <string name="show_password">Show password</string>
<string name="account_type_label">Protocol</string>
<!-- Audio Details --> <!-- Audio Details -->
<string name="account_preferences_audio_tab">Audio</string> <string name="account_preferences_audio_tab">Audio</string>
......
...@@ -41,6 +41,13 @@ as that of the covered work. ...@@ -41,6 +41,13 @@ as that of the covered work.
android:persistent="false" android:persistent="false"
android:summary="" android:summary=""
android:title="@string/account_alias_label" /> android:title="@string/account_alias_label" />
<EditTextPreference
android:id="@+id/account_type"
android:key="Account.type"
android:persistent="false"
android:summary=""
android:title="@string/account_type_label"
android:editable="false"/>
<EditTextPreference <EditTextPreference
android:id="@+id/account_hostname" android:id="@+id/account_hostname"
android:key="Account.hostname" android:key="Account.hostname"
......
...@@ -102,9 +102,12 @@ public class AccountEditionActivity extends Activity implements GeneralAccountFr ...@@ -102,9 +102,12 @@ public class AccountEditionActivity extends Activity implements GeneralAccountFr
} else { } else {
fragments.add(new GeneralAccountFragment()); fragments.add(new GeneralAccountFragment());
fragments.add(new AudioManagementFragment()); fragments.add(new AudioManagementFragment());
if(acc_selected.isSip())
{
fragments.add(new AdvancedAccountFragment()); fragments.add(new AdvancedAccountFragment());
fragments.add(new SecurityAccountFragment()); fragments.add(new SecurityAccountFragment());
} }
}
mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager = (ViewPager) findViewById(R.id.pager);
......
...@@ -18,6 +18,7 @@ import android.view.LayoutInflater; ...@@ -18,6 +18,7 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.EditText; import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView; import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener; import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast; import android.widget.Toast;
...@@ -30,12 +31,14 @@ public class AccountCreationFragment extends Fragment { ...@@ -30,12 +31,14 @@ public class AccountCreationFragment extends Fragment {
private String mHostname; private String mHostname;
private String mUsername; private String mUsername;
private String mPassword; private String mPassword;
private String mAccountType;
// UI references. // UI references.
private EditText mAliasView; private EditText mAliasView;
private EditText mHostnameView; private EditText mHostnameView;
private EditText mUsernameView; private EditText mUsernameView;
private PasswordEditText mPasswordView; private PasswordEditText mPasswordView;
private Spinner mAccountTypeView;
private Callbacks mCallbacks = sDummyCallbacks; private Callbacks mCallbacks = sDummyCallbacks;
private static Callbacks sDummyCallbacks = new Callbacks() { private static Callbacks sDummyCallbacks = new Callbacks() {
...@@ -65,6 +68,7 @@ public class AccountCreationFragment extends Fragment { ...@@ -65,6 +68,7 @@ public class AccountCreationFragment extends Fragment {
mHostnameView = (EditText) inflatedView.findViewById(R.id.hostname); mHostnameView = (EditText) inflatedView.findViewById(R.id.hostname);
mUsernameView = (EditText) inflatedView.findViewById(R.id.username); mUsernameView = (EditText) inflatedView.findViewById(R.id.username);
mPasswordView = (PasswordEditText) inflatedView.findViewById(R.id.password); mPasswordView = (PasswordEditText) inflatedView.findViewById(R.id.password);
mAccountTypeView = (Spinner) inflatedView.findViewById(R.id.account_type);
mPasswordView.getEdit_text().setOnEditorActionListener(new OnEditorActionListener() { mPasswordView.getEdit_text().setOnEditorActionListener(new OnEditorActionListener() {
...@@ -75,6 +79,7 @@ public class AccountCreationFragment extends Fragment { ...@@ -75,6 +79,7 @@ public class AccountCreationFragment extends Fragment {
mHostname = mHostnameView.getText().toString(); mHostname = mHostnameView.getText().toString();
mUsername = mUsernameView.getText().toString(); mUsername = mUsernameView.getText().toString();
mPassword = mPasswordView.getText().toString(); mPassword = mPasswordView.getText().toString();
mAccountType = mAccountTypeView.getSelectedItem().toString();
attemptCreation(); attemptCreation();
// } // }
...@@ -88,6 +93,7 @@ public class AccountCreationFragment extends Fragment { ...@@ -88,6 +93,7 @@ public class AccountCreationFragment extends Fragment {
mHostname = mHostnameView.getText().toString(); mHostname = mHostnameView.getText().toString();
mUsername = mUsernameView.getText().toString(); mUsername = mUsernameView.getText().toString();
mPassword = mPasswordView.getText().toString(); mPassword = mPasswordView.getText().toString();
mAccountType = mAccountTypeView.getSelectedItem().toString();
attemptCreation(); attemptCreation();
} }
}); });
...@@ -178,6 +184,7 @@ public class AccountCreationFragment extends Fragment { ...@@ -178,6 +184,7 @@ public class AccountCreationFragment extends Fragment {
accountDetails.put(AccountDetailBasic.CONFIG_ACCOUNT_HOSTNAME, mHostname); accountDetails.put(AccountDetailBasic.CONFIG_ACCOUNT_HOSTNAME, mHostname);
accountDetails.put(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME, mUsername); accountDetails.put(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME, mUsername);
accountDetails.put(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD, mPassword); accountDetails.put(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD, mPassword);
accountDetails.put(AccountDetailBasic.CONFIG_ACCOUNT_TYPE, mAccountType);
createNewAccount(accountDetails); createNewAccount(accountDetails);
......
...@@ -145,7 +145,9 @@ public class GeneralAccountFragment extends PreferenceFragment { ...@@ -145,7 +145,9 @@ public class GeneralAccountFragment extends PreferenceFragment {
mCallbacks.getAccount().getCredentials().get(0).setDetailString(preference.getKey(), newValue.toString()); mCallbacks.getAccount().getCredentials().get(0).setDetailString(preference.getKey(), newValue.toString());
preference.setSummary(tmp); preference.setSummary(tmp);
} else if(preference.getKey().contentEquals(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME)) { } else if(preference.getKey().contentEquals(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME)) {
if(mCallbacks.getAccount().isSip()){
mCallbacks.getAccount().getCredentials().get(0).setDetailString(preference.getKey(), newValue.toString()); mCallbacks.getAccount().getCredentials().get(0).setDetailString(preference.getKey(), newValue.toString());
}
preference.setSummary((CharSequence) newValue); preference.setSummary((CharSequence) newValue);
} else { } else {
preference.setSummary((CharSequence) newValue); preference.setSummary((CharSequence) newValue);
......
...@@ -94,6 +94,10 @@ public class Account extends java.util.Observable implements Parcelable { ...@@ -94,6 +94,10 @@ public class Account extends java.util.Observable implements Parcelable {
return basicDetails.getDetailString(AccountDetailBasic.CONFIG_ACCOUNT_ALIAS); return basicDetails.getDetailString(AccountDetailBasic.CONFIG_ACCOUNT_ALIAS);
} }
public Boolean isSip() {
return basicDetails.getDetailString(AccountDetailBasic.CONFIG_ACCOUNT_TYPE).equals("SIP");
}
public void setAlias(String alias) { public void setAlias(String alias) {
basicDetails.setDetailString(AccountDetailBasic.CONFIG_ACCOUNT_ALIAS, alias); basicDetails.setDetailString(AccountDetailBasic.CONFIG_ACCOUNT_ALIAS, alias);
} }
......
...@@ -98,17 +98,19 @@ public class SwigNativeConverter { ...@@ -98,17 +98,19 @@ public class SwigNativeConverter {
nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_HOSTNAME, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_HOSTNAME)); nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_HOSTNAME, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_HOSTNAME));
nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME)); nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME));
nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD)); nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD));
nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_ROUTESET, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_ROUTESET));
nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_TYPE, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_TYPE)); nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_TYPE, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_TYPE));
nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_ENABLE, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_ENABLE)); nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_ENABLE, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_ENABLE));
nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_USERAGENT, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_USERAGENT)); nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_USERAGENT, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_USERAGENT));
nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_AUTOANSWER, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_AUTOANSWER)); nativemap.put(AccountDetailAdvanced.CONFIG_ACCOUNT_MAILBOX, swigmap.get(AccountDetailAdvanced.CONFIG_ACCOUNT_MAILBOX));
if (swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_TYPE).equals("SIP"))
{
nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_AUTOANSWER, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_AUTOANSWER));
nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_ROUTESET, swigmap.get(AccountDetailBasic.CONFIG_ACCOUNT_ROUTESET));
nativemap nativemap
.put(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_EXPIRE, swigmap.get(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_EXPIRE)); .put(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_EXPIRE, swigmap.get(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_EXPIRE));
nativemap.put(AccountDetailAdvanced.CONFIG_LOCAL_INTERFACE, swigmap.get(AccountDetailAdvanced.CONFIG_LOCAL_INTERFACE)); nativemap.put(AccountDetailAdvanced.CONFIG_LOCAL_INTERFACE, swigmap.get(AccountDetailAdvanced.CONFIG_LOCAL_INTERFACE));
nativemap.put(AccountDetailAdvanced.CONFIG_STUN_SERVER, swigmap.get(AccountDetailAdvanced.CONFIG_STUN_SERVER)); nativemap.put(AccountDetailAdvanced.CONFIG_STUN_SERVER, swigmap.get(AccountDetailAdvanced.CONFIG_STUN_SERVER));
nativemap.put(AccountDetailAdvanced.CONFIG_ACCOUNT_MAILBOX, swigmap.get(AccountDetailAdvanced.CONFIG_ACCOUNT_MAILBOX));
nativemap nativemap
.put(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_STATUS, swigmap.get(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_STATUS)); .put(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_STATUS, swigmap.get(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_STATUS));
nativemap.put(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_STATE_CODE, nativemap.put(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_STATE_CODE,
...@@ -127,7 +129,6 @@ public class SwigNativeConverter { ...@@ -127,7 +129,6 @@ public class SwigNativeConverter {
nativemap.put(AccountDetailAdvanced.CONFIG_AUDIO_PORT_MAX, swigmap.get(AccountDetailAdvanced.CONFIG_AUDIO_PORT_MAX)); nativemap.put(AccountDetailAdvanced.CONFIG_AUDIO_PORT_MAX, swigmap.get(AccountDetailAdvanced.CONFIG_AUDIO_PORT_MAX));
nativemap.put(AccountDetailAdvanced.CONFIG_AUDIO_PORT_MIN, swigmap.get(AccountDetailAdvanced.CONFIG_AUDIO_PORT_MIN)); nativemap.put(AccountDetailAdvanced.CONFIG_AUDIO_PORT_MIN, swigmap.get(AccountDetailAdvanced.CONFIG_AUDIO_PORT_MIN));
nativemap.put(AccountDetailSrtp.CONFIG_SRTP_KEY_EXCHANGE, swigmap.get(AccountDetailSrtp.CONFIG_SRTP_KEY_EXCHANGE)); nativemap.put(AccountDetailSrtp.CONFIG_SRTP_KEY_EXCHANGE, swigmap.get(AccountDetailSrtp.CONFIG_SRTP_KEY_EXCHANGE));
nativemap.put(AccountDetailSrtp.CONFIG_SRTP_RTP_FALLBACK, swigmap.get(AccountDetailSrtp.CONFIG_SRTP_RTP_FALLBACK)); nativemap.put(AccountDetailSrtp.CONFIG_SRTP_RTP_FALLBACK, swigmap.get(AccountDetailSrtp.CONFIG_SRTP_RTP_FALLBACK));
nativemap.put(AccountDetailSrtp.CONFIG_ZRTP_DISPLAY_SAS, swigmap.get(AccountDetailSrtp.CONFIG_ZRTP_DISPLAY_SAS)); nativemap.put(AccountDetailSrtp.CONFIG_ZRTP_DISPLAY_SAS, swigmap.get(AccountDetailSrtp.CONFIG_ZRTP_DISPLAY_SAS));
...@@ -149,6 +150,54 @@ public class SwigNativeConverter { ...@@ -149,6 +150,54 @@ public class SwigNativeConverter {
nativemap.put(AccountDetailTls.CONFIG_TLS_CERTIFICATE_FILE, swigmap.get(AccountDetailTls.CONFIG_TLS_CERTIFICATE_FILE)); nativemap.put(AccountDetailTls.CONFIG_TLS_CERTIFICATE_FILE, swigmap.get(AccountDetailTls.CONFIG_TLS_CERTIFICATE_FILE));
nativemap.put(AccountDetailTls.CONFIG_TLS_CA_LIST_FILE, swigmap.get(AccountDetailTls.CONFIG_TLS_CA_LIST_FILE)); nativemap.put(AccountDetailTls.CONFIG_TLS_CA_LIST_FILE, swigmap.get(AccountDetailTls.CONFIG_TLS_CA_LIST_FILE));
nativemap.put(AccountDetailTls.CONFIG_TLS_ENABLE, swigmap.get(AccountDetailTls.CONFIG_TLS_ENABLE)); nativemap.put(AccountDetailTls.CONFIG_TLS_ENABLE, swigmap.get(AccountDetailTls.CONFIG_TLS_ENABLE));
}
else
{
nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_AUTOANSWER, "");
nativemap.put(AccountDetailBasic.CONFIG_ACCOUNT_ROUTESET, "");
nativemap
.put(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_EXPIRE, "");
nativemap.put(AccountDetailAdvanced.CONFIG_LOCAL_INTERFACE, "");
nativemap.put(AccountDetailAdvanced.CONFIG_STUN_SERVER, "");
nativemap.put(AccountDetailAdvanced.CONFIG_ACCOUNT_MAILBOX, "");
nativemap
.put(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_STATUS, "");
nativemap.put(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_STATE_CODE,"");
nativemap.put(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_STATE_DESC,"");
nativemap.put(AccountDetailAdvanced.CONFIG_ACCOUNT_DTMF_TYPE, "");
nativemap.put(AccountDetailAdvanced.CONFIG_KEEP_ALIVE_ENABLED, "");
nativemap.put(AccountDetailAdvanced.CONFIG_LOCAL_PORT, "");
nativemap.put(AccountDetailAdvanced.CONFIG_PUBLISHED_ADDRESS, "");
nativemap.put(AccountDetailAdvanced.CONFIG_PUBLISHED_PORT, "");
nativemap.put(AccountDetailAdvanced.CONFIG_PUBLISHED_SAMEAS_LOCAL, "");
nativemap.put(AccountDetailAdvanced.CONFIG_RINGTONE_ENABLED, "");
nativemap.put(AccountDetailAdvanced.CONFIG_RINGTONE_PATH, "");
nativemap.put(AccountDetailAdvanced.CONFIG_STUN_ENABLE, "");
nativemap.put(AccountDetailAdvanced.CONFIG_AUDIO_PORT_MAX, "");
nativemap.put(AccountDetailAdvanced.CONFIG_AUDIO_PORT_MIN, "");
nativemap.put(AccountDetailSrtp.CONFIG_SRTP_KEY_EXCHANGE, "");
nativemap.put(AccountDetailSrtp.CONFIG_SRTP_RTP_FALLBACK, "");
nativemap.put(AccountDetailSrtp.CONFIG_ZRTP_DISPLAY_SAS, "");
nativemap.put(AccountDetailSrtp.CONFIG_ZRTP_DISPLAY_SAS_ONCE, "");
nativemap.put(AccountDetailSrtp.CONFIG_ZRTP_HELLO_HASH, "");
nativemap.put(AccountDetailSrtp.CONFIG_ZRTP_NOT_SUPP_WARNING, "");
nativemap.put(AccountDetailSrtp.CONFIG_SRTP_ENABLE, "");
nativemap.put(AccountDetailTls.CONFIG_TLS_CIPHERS, "");
nativemap.put(AccountDetailTls.CONFIG_TLS_LISTENER_PORT, "");
nativemap.put(AccountDetailTls.CONFIG_TLS_METHOD, "");
nativemap.put(AccountDetailTls.CONFIG_TLS_NEGOTIATION_TIMEOUT_SEC, "");
nativemap.put(AccountDetailTls.CONFIG_TLS_PASSWORD, "");
nativemap.put(AccountDetailTls.CONFIG_TLS_PRIVATE_KEY_FILE, "");
nativemap.put(AccountDetailTls.CONFIG_TLS_REQUIRE_CLIENT_CERTIFICATE, "");
nativemap.put(AccountDetailTls.CONFIG_TLS_SERVER_NAME, "");
nativemap.put(AccountDetailTls.CONFIG_TLS_VERIFY_CLIENT, "");
nativemap.put(AccountDetailTls.CONFIG_TLS_VERIFY_SERVER, "");
nativemap.put(AccountDetailTls.CONFIG_TLS_CERTIFICATE_FILE, "");
nativemap.put(AccountDetailTls.CONFIG_TLS_CA_LIST_FILE, "");
nativemap.put(AccountDetailTls.CONFIG_TLS_ENABLE, "");
}
return nativemap; return nativemap;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment