Skip to content

Commit 076fb87

Browse files
authored
Merge pull request #21 from Xcreen/implement_nsd
Implement nsd
2 parents 3ffc017 + 2813538 commit 076fb87

File tree

6 files changed

+69
-2
lines changed

6 files changed

+69
-2
lines changed

app/src/main/java/net/xcreen/restsms/MainActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
5454
//Set Home Fragment
5555
val fragmentTransaction = supportFragmentManager.beginTransaction()
5656
try {
57-
val homeFragment: Fragment = HomeFragment::class.java.newInstance()
57+
val homeFragment: Fragment = HomeFragment::class.java.getDeclaredConstructor().newInstance()
5858
fragmentTransaction.replace(R.id.main_framelayout, homeFragment).commit()
5959
} catch (ex: Exception) {
6060
ex.printStackTrace()

app/src/main/java/net/xcreen/restsms/fragments/SettingsFragment.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class SettingsFragment : Fragment() {
2424
val openBrowserCheckBox = rootView.findViewById<CheckBox>(R.id.settings_open_browser_checkbox)
2525
val disableLoggingCheckBox = rootView.findViewById<CheckBox>(R.id.settings_disable_logging_checkbox)
2626
val enableAuth = rootView.findViewById<CheckBox>(R.id.settings_enable_auth)
27+
val enableNSD = rootView.findViewById<CheckBox>(R.id.settings_enable_nsd)
2728
val saveBtn = rootView.findViewById<Button>(R.id.settings_save_btn)
2829
saveBtn.setOnClickListener { v ->
2930
var saved = false
@@ -58,6 +59,9 @@ class SettingsFragment : Fragment() {
5859
//Save Enable authentication
5960
editor.putBoolean("enable_auth", enableAuth.isChecked)
6061
editor.apply()
62+
//Save Enable NSD
63+
editor.putBoolean("enable_nsd", enableNSD.isChecked)
64+
editor.apply()
6165
if (saved) {
6266
Toast.makeText(v.context, resources.getText(R.string.setting_saved), Toast.LENGTH_SHORT).show()
6367
}
@@ -78,6 +82,10 @@ class SettingsFragment : Fragment() {
7882
if (sharedPref.getBoolean("enable_auth", false)) {
7983
enableAuth.isChecked = true
8084
}
85+
//Set current "NSD"-Option
86+
if (sharedPref.getBoolean("enable_nsd", false)) {
87+
enableNSD.isChecked = true
88+
}
8189
return rootView
8290
}
8391
}

app/src/main/java/net/xcreen/restsms/server/SMSServer.kt

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
11
package net.xcreen.restsms.server
22

3+
import android.content.Context
4+
import android.net.nsd.NsdManager
5+
import android.net.nsd.NsdServiceInfo
6+
import android.util.Log
7+
import net.xcreen.restsms.AppContext
38
import org.eclipse.jetty.server.Server
49
import org.eclipse.jetty.servlet.ServletContextHandler
510
import org.eclipse.jetty.servlet.ServletHolder
611
import javax.servlet.MultipartConfigElement
712

813
class SMSServer {
914
var port = 8080
15+
var startNSD = false
1016
var goodToken = ""
1117
var authEnabled = false
1218
private var jettyServer: Server? = null
13-
19+
private var nsdManager: NsdManager? = null
20+
private var nsdRegistrationListener: NsdManager.RegistrationListener? = null
21+
private val TAG = "SMSServer"
1422
/**
1523
* Get Server-Logger
1624
* @return serverLogging - ServerLogging-Object
@@ -38,6 +46,39 @@ class SMSServer {
3846
servletContextHandler.addServlet(smsWelcomeServletHolder, "/")
3947
jettyServer!!.handler = servletContextHandler
4048

49+
//Start NSD
50+
val nsdServiceInfo = NsdServiceInfo()
51+
nsdServiceInfo.serviceName = "RestSMS"
52+
nsdServiceInfo.serviceType = "_http._tcp."
53+
nsdServiceInfo.port = port
54+
55+
nsdManager = AppContext.appContext.getSystemService(Context.NSD_SERVICE) as NsdManager
56+
57+
nsdRegistrationListener = object : NsdManager.RegistrationListener {
58+
override fun onServiceRegistered(serviceInfo: NsdServiceInfo) {
59+
val registeredName = serviceInfo.serviceName
60+
Log.i(TAG, "NSD Service registered: $registeredName")
61+
serverLogging!!.log("info", "NSD Service registered: $registeredName")
62+
}
63+
64+
override fun onRegistrationFailed(serviceInfo: NsdServiceInfo, errorCode: Int) {
65+
Log.e(TAG, "NSD Service registration failed: $errorCode")
66+
serverLogging!!.log("error", "NSD Service registration failed: $errorCode")
67+
}
68+
69+
override fun onServiceUnregistered(serviceInfo: NsdServiceInfo) {
70+
Log.i(TAG, "NSD Service unregistered.")
71+
serverLogging!!.log("info", "NSD Service unregistered.")
72+
}
73+
74+
override fun onUnregistrationFailed(serviceInfo: NsdServiceInfo, errorCode: Int) {
75+
Log.e(TAG, "NSD Service unregistration failed: $errorCode")
76+
serverLogging!!.log("error", "NSD Service unregistration failed: $errorCode")
77+
}
78+
}
79+
if(startNSD) {
80+
nsdManager!!.registerService(nsdServiceInfo, NsdManager.PROTOCOL_DNS_SD, nsdRegistrationListener)
81+
}
4182
//Start Jetty
4283
jettyServer!!.start()
4384
jettyServer!!.join()
@@ -53,6 +94,9 @@ class SMSServer {
5394
serverLogging!!.log("info", "Stopping Server...")
5495
jettyServer!!.stop()
5596
}
97+
nsdRegistrationListener?.let {
98+
nsdManager?.unregisterService(it)
99+
}
56100
}
57101

58102
/**

app/src/main/java/net/xcreen/restsms/server/ServerService.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ class ServerService : Service() {
5858
val sharedPref = PreferenceManager.getDefaultSharedPreferences(this)
5959
val serverPort = sharedPref.getInt("server_port", 8080)
6060
appContext?.smsServer?.port = serverPort
61+
//Set NSD
62+
appContext?.smsServer?.startNSD = sharedPref.getBoolean("enable_nsd", false)
6163
//Set Auth params
6264
val goodToken = sharedPref.getString("server_token", "") ?: ""
6365
val authEnabled = sharedPref.getBoolean("enable_auth", false)

app/src/main/res/layout/fragment_settings.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,18 @@
107107
android:textColor="@color/colorWhite"
108108
app:layout_constraintStart_toStartOf="parent"
109109
app:layout_constraintTop_toBottomOf="@+id/settings_open_browser_checkbox" />
110+
111+
<CheckBox
112+
android:id="@+id/settings_enable_nsd"
113+
android:layout_width="wrap_content"
114+
android:layout_height="wrap_content"
115+
android:layout_marginStart="8dp"
116+
android:layout_marginTop="8dp"
117+
android:text="@string/setting_enable_nsd"
118+
android:textAppearance="@style/TextAppearance.MaterialComponents.Subtitle1"
119+
android:textColor="@color/colorWhite"
120+
app:layout_constraintStart_toStartOf="parent"
121+
app:layout_constraintTop_toBottomOf="@+id/settings_token_edittext" />
110122
</androidx.constraintlayout.widget.ConstraintLayout>
111123

112124
</FrameLayout>

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
<string name="setting_open_website">Open Browser after Server-Start</string>
5151
<string name="setting_disable_logging">Disable writing/creating log-files</string>
5252
<string name="setting_enable_auth">Enable authentication</string>
53+
<string name="setting_enable_nsd">Enable Network Service Discovery</string>
5354
<string name="setting_save">Save</string>
5455
<string name="setting_invalid_port">Invalid Port!</string>
5556
<string name="setting_invalid_port_range">Port must be between 0 and 65535!</string>

0 commit comments

Comments
 (0)