diff options
Diffstat (limited to 'client/Piztor/src/com/macaroon/piztor/SocketClient.java')
-rw-r--r-- | client/Piztor/src/com/macaroon/piztor/SocketClient.java | 309 |
1 files changed, 202 insertions, 107 deletions
diff --git a/client/Piztor/src/com/macaroon/piztor/SocketClient.java b/client/Piztor/src/com/macaroon/piztor/SocketClient.java index 18c19da..3bc7ef3 100644 --- a/client/Piztor/src/com/macaroon/piztor/SocketClient.java +++ b/client/Piztor/src/com/macaroon/piztor/SocketClient.java @@ -1,107 +1,202 @@ -package com.macaroon.piztor; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.net.Socket; -import java.net.UnknownHostException; -import java.util.Vector; - -import android.os.Handler; -import android.os.Message; - -public class SocketClient { - static Socket client; - - public SocketClient(String site, int port) throws UnknownHostException, - IOException { - try { - client = new Socket(site, port); - } catch (UnknownHostException e) { - throw e; - } catch (IOException e) { - throw e; - } - } - - public void sendMsg(Req req,Handler recall) throws IOException { - try { - DataOutputStream out = new DataOutputStream( - client.getOutputStream()); - int tmp = req.type; - out.writeByte(tmp); - switch (tmp) { - case 0: - ReqLogin rau = (ReqLogin) req; - String id = rau.user; - String pa = rau.pass; - out.writeBytes(id + "\0" + pa); - break; - case 2: - ReqUpdate rup = (ReqUpdate) req; - int tk2 = rup.token; - double slat = rup.lat; - double slot = rup.lot; - out.writeInt(tk2); - out.writeDouble(slat); - out.writeDouble(slot); - break; - case 3: - ReqLocation ras = (ReqLocation) req; - int tk3 = ras.token; - int gid = ras.gid; - out.writeInt(tk3); - out.writeInt(gid); - break; - } - out.flush(); - client.shutdownOutput(); - DataInputStream in = new DataInputStream(client.getInputStream()); - Message msg = new Message(); - int type = in.readUnsignedByte(); - switch (type) { - case 0: - int id = in.readInt(); - int status = in.readUnsignedByte(); - ResLogin rchklogin = new ResLogin(id,status); - msg.obj = rchklogin; - msg.what = 0; - recall.sendMessage(msg); - break; - case 2: - int status1 = in.readUnsignedByte(); - ResUpdate rchkupd = new ResUpdate(status1); - msg.obj = rchkupd; - msg.what = 1; - recall.sendMessage(msg); - break; - case 3: - int n = in.readInt(); - Vector<Rlocation> tmpv = new Vector<Rlocation>(); - for (int i = 1; i <= n; i++) { - int tid = in.readInt(); - double lat = in.readDouble(); - double lot = in.readDouble(); - tmpv.add(new Rlocation(tid,lat,lot)); - } - ResLocation rlocin = new ResLocation(n,tmpv); - msg.obj = rlocin; - msg.what = 3; - recall.sendMessage(msg); - break; - } - - } catch (IOException e) { - throw e; - } - } - - public void closeSocket() { - try { - client.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - -} +package com.macaroon.piztor; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.Socket; +import java.net.UnknownHostException; +import java.util.Vector; + +import android.annotation.SuppressLint; +import android.os.Handler; +import android.os.Message; + +public class SocketClient { + static Socket client; + + public SocketClient(String site, int port) throws UnknownHostException, + IOException { + try { + client = new Socket(site, port); + } catch (UnknownHostException e) { + throw e; + } catch (IOException e) { + throw e; + } + } + + public void sendMsg(Req req,Handler recall) throws IOException { + try { + DataOutputStream out = new DataOutputStream( + client.getOutputStream()); + int tmp = req.type; + int len; + switch (tmp) { + case 0: + ReqLogin rau = (ReqLogin) req; + String id = rau.user; + String pa = rau.pass; + len = 4+1+id.length()+1+pa.length(); + out.writeInt(len); + out.writeByte(tmp); + out.writeBytes(id); + out.writeByte(0); + out.writeBytes(pa); + break; + case 1: + ReqUpdate rup = (ReqUpdate) req; + String tk1 = rup.token; + String name1 = rup.uname; + len = 4+1+32+name1.length()+1+8+8; + out.writeInt(len); + out.writeByte(tmp); + double slat = rup.lat; + double slot = rup.lot; + byte[] b = hexStringToBytes(tk1); + out.write(b); + out.writeBytes(name1); + out.writeByte(0); + out.writeDouble(slat); + out.writeDouble(slot); + break; + case 2: + ReqLocation ras = (ReqLocation) req; + String tk2 = ras.token; + String name2 = ras.uname; + len = 4+1+32+name2.length()+1+4; + out.writeInt(len); + out.writeByte(tmp); + int gid = ras.gid; + byte[] b2 = hexStringToBytes(tk2); + out.write(b2); + out.writeBytes(name2); + out.writeByte(0); + out.writeInt(gid); + break; + case 3: + ReqUserinfo rus = (ReqUserinfo) req; + String tk3 = rus.token; + String name3 = rus.uname; + len = 4+1+32+name3.length()+1+4; + out.writeInt(len); + out.writeByte(tmp); + int usid = rus.uid; + byte[] b3 = hexStringToBytes(tk3); + out.write(b3); + out.writeBytes(name3); + out.writeByte(0); + out.writeInt(usid); + break; + } + out.flush(); + DataInputStream in = new DataInputStream(client.getInputStream()); + Message msg = new Message(); + int outlen = in.readInt(); + int type = in.readUnsignedByte(); + switch (type) { + case 0: + int status = in.readUnsignedByte(); + int id = in.readInt(); + byte[] buffer = new byte[32]; + in.read(buffer); + String tk = ""; + for (int i = 0; i < buffer.length; i++) { + String hex = Integer.toHexString(buffer[i] & 0xFF); + if (hex.length() == 1) { + hex = '0' + hex; + } + tk += hex; + } + ResLogin rchklogin = new ResLogin(id,tk,status); + msg.obj = rchklogin; + msg.what = 0; + recall.sendMessage(msg); + break; + case 1: + int status1 = in.readUnsignedByte(); + ResUpdate rchkupd = new ResUpdate(status1); + msg.obj = rchkupd; + msg.what = 1; + recall.sendMessage(msg); + break; + case 2: + int status2 = in.readUnsignedByte(); + int n = in.readInt(); + Vector<Rlocation> tmpv = new Vector<Rlocation>(); + for (int i = 1; i <= n; i++) { + int tid = in.readInt(); + double lat = in.readDouble(); + double lot = in.readDouble(); + tmpv.add(new Rlocation(tid,lat,lot)); + } + ResLocation rlocin = new ResLocation(n,status2,tmpv); + msg.obj = rlocin; + msg.what = 2; + recall.sendMessage(msg); + break; + case 3: + int status3 = in.readUnsignedByte(); + Vector<RUserinfo> tmpu = new Vector<RUserinfo>(); + while(outlen>0){ + RUserinfo r; + int typ = in.readUnsignedByte(); + outlen-=1; + switch(typ){ + case 0: + int gid = in.readInt(); + in.readByte(); + r = new RKeyGroupID(gid); + outlen-=5; + tmpu.add(r); + break; + case 1: + boolean s = in.readBoolean(); + in.readByte(); + r = new RKeyGender(s); + outlen-=2; + tmpu.add(r); + break; + } + } + ResUserinfo resus = new ResUserinfo(status3,tmpu); + msg.obj = resus; + msg.what = 3; + recall.sendMessage(msg); + break; + } + + } catch (IOException e) { + throw e; + } + } + + public void closeSocket() throws IOException{ + try { + client.close(); + } catch (IOException e) { + e.printStackTrace(); + throw e; + } + } + + @SuppressLint("DefaultLocale") + private static byte[] hexStringToBytes(String hexString) { + if (hexString == null || hexString.equals("")) { + return null; + } + hexString = hexString.toUpperCase(); + int length = hexString.length() / 2; + char[] hexChars = hexString.toCharArray(); + byte[] d = new byte[length]; + for (int i = 0; i < length; i++) { + int pos = i * 2; + d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); + } + return d; + } + + private static byte charToByte(char c) { + return (byte) "0123456789ABCDEF".indexOf(c); + } + +} |