4 import java.util.Arrays;
12 CloudComm(String _baseurl, Cipher _encrypt, Cipher _decrypt) {
13 this.baseurl=_baseurl;
14 this.encryptcipher = _encrypt;
15 this.decryptcipher = _decrypt;
18 private URL buildRequest(boolean isput, long sequencenumber, long maxentries) throws IOException {
19 String reqstring=isput?"req=putslot":"req=getslot";
20 String urlstr=baseurl+"?"+reqstring+"&seq="+sequencenumber;
22 urlstr += "&max="+maxentries;
23 return new URL(urlstr);
26 public Slot[] putSlot(Slot slot, int max) throws IOException{
27 long sequencenumber=slot.getSequenceNumber();
28 URL url=buildRequest(true, sequencenumber, max);
29 URLConnection con=url.openConnection();
30 HttpURLConnection http = (HttpURLConnection) con;
31 http.setRequestMethod("POST");
32 http.setFixedLengthStreamingMode(slot.getBytes().length);
33 http.setDoOutput(true);
35 OutputStream os=http.getOutputStream();
36 os.write(slot.getBytes());
37 System.out.println(http.getResponseMessage());
39 InputStream is=http.getInputStream();
40 DataInputStream dis=new DataInputStream(is);
41 byte[] resptype=new byte[7];
42 dis.readFully(resptype);
43 if (Arrays.equals(resptype, "getslot".getBytes()))
44 return processSlots(dis, sequencenumber);
45 else if (Arrays.equals(resptype, "putslot".getBytes()))
48 throw new Error("Bad response to putslot");
51 public Slot[] getSlots(long sequencenumber) throws IOException {
52 URL url=buildRequest(false, sequencenumber, 0);
53 URLConnection con=url.openConnection();
54 HttpURLConnection http = (HttpURLConnection) con;
55 http.setRequestMethod("POST");
57 System.out.println(http.getResponseMessage());
58 InputStream is=http.getInputStream();
60 DataInputStream dis=new DataInputStream(is);
61 byte[] resptype=new byte[7];
62 dis.readFully(resptype);
63 if (!Arrays.equals(resptype, "getslot".getBytes()))
64 throw new Error("Bad Response: "+new String(resptype));
66 return processSlots(dis, sequencenumber);
69 Slot[] processSlots(DataInputStream dis, long sequencenumber) throws IOException {
70 int numberofslots=dis.readInt();
71 int[] sizesofslots=new int[numberofslots];
72 Slot[] slots=new Slot[numberofslots];
73 System.out.println(numberofslots);
74 for(int i=0;i<numberofslots;i++)
75 sizesofslots[i]=dis.readInt();
77 for(int i=0;i<numberofslots;i++) {
78 byte[] data=new byte[sizesofslots[i]];
80 slots[i]=new Slot(sequencenumber+i, data);