NetMan.java (5545B)
1 package drsocto.shlist; 2 3 import android.content.Context; 4 import android.os.AsyncTask; 5 import android.util.JsonReader; 6 import android.util.Log; 7 8 import org.json.JSONException; 9 import org.json.JSONObject; 10 11 import java.io.BufferedReader; 12 import java.io.BufferedWriter; 13 import java.io.IOException; 14 import java.io.InputStream; 15 import java.io.InputStreamReader; 16 import java.io.OutputStreamWriter; 17 import java.io.PrintWriter; 18 import java.net.Socket; 19 import java.net.UnknownHostException; 20 import java.nio.ByteBuffer; 21 22 import javax.net.SocketFactory; 23 import javax.net.ssl.SSLSocket; 24 import javax.net.ssl.SSLSocketFactory; 25 26 /** 27 * Created by David on 7/12/2015. 28 */ 29 public class NetMan { 30 private String addr; 31 private int port; 32 SocketFactory sf = SSLSocketFactory.getDefault(); 33 SSLSocket socket; 34 Context context; 35 36 public NetMan(String addr, int port, Context theContext) { 37 this.addr = addr; 38 this.port = port; 39 context = theContext; 40 } 41 42 public int openSocket() { 43 try { 44 socket = (SSLSocket) sf.createSocket(addr, port); 45 return 0; 46 } catch (UnknownHostException e) { 47 Log.d("NetMan", "Unknown Host Excetion"); 48 return 1; 49 } catch (IOException e) { 50 Log.d("NetMan", "IO Exception"); 51 return 2; 52 } 53 } 54 55 public int closeSocket() { 56 try { 57 socket.close(); 58 return 0; 59 } catch (IOException e) { 60 Log.d("NetMan", "IOException" + e); 61 return 2; 62 } 63 } 64 65 public String sendMessage(String[] args) { 66 // Setup Header 67 int mType = Integer.parseInt(args[1]); 68 String message = args[0]; 69 Log.d("NetMan", "In sendMessage"); 70 Log.d("NetMan", "First Type: " + mType); 71 Log.d("NetMan", "Message: " + message + " | Type: " + mType); 72 byte[] version = toByteArray(MsgTypes.protocol_version); 73 byte[] type = toByteArray(mType); 74 byte[] length = toByteArray(message.length()); 75 // Send Message 76 if (openSocket() == 0) { 77 try { 78 Log.d("NetMan", "In socket open"); 79 PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); 80 81 socket.getOutputStream().write(version); 82 socket.getOutputStream().write(type); 83 socket.getOutputStream().write(length); 84 out.print(message); 85 out.flush(); 86 87 InputStream in = socket.getInputStream(); 88 int count = in.read(version); 89 count = in.read(type); 90 count = in.read(length); 91 92 int vInt = fromByteArray(version); 93 int tInt = fromByteArray(type); 94 int lInt = fromByteArray(length); 95 96 Log.d("NetMan", "Header Read"); 97 Log.d("NetMan", "Version: " + vInt + " | Type: " + tInt + " | Length: " + lInt); 98 99 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 100 101 char[] response = new char[lInt]; 102 Log.d("NetMan", "Message Length: " + response.length); 103 count = br.read(response); 104 105 String response_str = ""; 106 107 for (int i = 0; i < response.length; ++i) { 108 response_str += response[i]; 109 } 110 111 Log.d("netman", "Response: " + response_str); 112 113 114 if (!response_str.isEmpty()) { 115 JSONObject obj; 116 String status; 117 try { 118 obj = new JSONObject(response_str); 119 status = obj.getString("status"); 120 Log.d("netman", "Parsed JSON, status: " + status); 121 if (status.equalsIgnoreCase("ok")) { 122 switch (mType) { 123 case MsgTypes.device_add: 124 closeSocket(); 125 return obj.getString("device_id"); 126 case MsgTypes.list_add: 127 closeSocket(); 128 return obj.toString(); 129 case MsgTypes.lists_get: 130 closeSocket(); 131 return obj.toString(); 132 } 133 } else { 134 Log.d("netman", "Error:" + obj.toString()); 135 } 136 } catch (JSONException e) { 137 Log.d("netman", "JSONException: " + e); 138 } 139 } else { 140 Log.d("netman", "Error: empty payload"); 141 } 142 143 } catch (java.io.IOException e) { 144 Log.d("NetMan", "Exception: " + e); 145 } 146 closeSocket(); 147 } 148 return "failed"; 149 } 150 151 public static int fromByteArray(byte[] bytes) { 152 return (bytes[0] & 0xFF) << 8 | (bytes[1] & 0xFF); 153 } 154 155 public static byte[] toByteArray(long value) 156 { 157 byte[] ret = new byte[2]; 158 ret[1] = (byte) ((value >> ((0)*8) & 0xFF)); 159 ret[0] = (byte) ((value >> ((1)*8) & 0xFF)); 160 return ret; 161 } 162 }