4 import java.util.Arrays;
13 CloudComm(String _baseurl, Cipher _encrypt, Cipher _decrypt, Mac _mac) {
14 this.baseurl=_baseurl;
15 this.encryptcipher = _encrypt;
16 this.decryptcipher = _decrypt;
20 private URL buildRequest(boolean isput, long sequencenumber, long maxentries) throws IOException {
21 String reqstring=isput?"req=putslot":"req=getslot";
22 String urlstr=baseurl+"?"+reqstring+"&seq="+sequencenumber;
24 urlstr += "&max="+maxentries;
25 return new URL(urlstr);
28 public Slot[] putSlot(Slot slot, int max) throws IOException{
30 long sequencenumber=slot.getSequenceNumber();
31 byte[] bytes=slot.encode(mac);
33 URL url=buildRequest(true, sequencenumber, max);
34 URLConnection con=url.openConnection();
35 HttpURLConnection http = (HttpURLConnection) con;
36 http.setRequestMethod("POST");
37 http.setFixedLengthStreamingMode(bytes.length);
38 http.setDoOutput(true);
40 OutputStream os=http.getOutputStream();
42 System.out.println(http.getResponseMessage());
44 InputStream is=http.getInputStream();
45 DataInputStream dis=new DataInputStream(is);
46 byte[] resptype=new byte[7];
47 dis.readFully(resptype);
48 if (Arrays.equals(resptype, "getslot".getBytes()))
49 return processSlots(dis);
50 else if (Arrays.equals(resptype, "putslot".getBytes()))
53 throw new Error("Bad response to putslot");
54 } catch (Exception e) {
55 throw new Error("putSlot failed");
59 public Slot[] getSlots(long sequencenumber) {
61 URL url=buildRequest(false, sequencenumber, 0);
62 URLConnection con=url.openConnection();
63 HttpURLConnection http = (HttpURLConnection) con;
64 http.setRequestMethod("POST");
66 System.out.println(http.getResponseMessage());
67 InputStream is=http.getInputStream();
69 DataInputStream dis=new DataInputStream(is);
70 byte[] resptype=new byte[7];
71 dis.readFully(resptype);
72 if (!Arrays.equals(resptype, "getslot".getBytes()))
73 throw new Error("Bad Response: "+new String(resptype));
75 return processSlots(dis);
76 } catch (Exception e) {
77 throw new Error("getSlots failed");
81 Slot[] processSlots(DataInputStream dis) throws IOException {
82 int numberofslots=dis.readInt();
83 int[] sizesofslots=new int[numberofslots];
84 Slot[] slots=new Slot[numberofslots];
85 for(int i=0;i<numberofslots;i++)
86 sizesofslots[i]=dis.readInt();
88 for(int i=0;i<numberofslots;i++) {
89 byte[] data=new byte[sizesofslots[i]];
91 slots[i]=Slot.decode(data, mac);