4 import java.util.Arrays;
8 CloudComm(String _baseurl) {
12 private URL buildRequest(boolean isput, long sequencenumber, long maxentries) throws IOException {
13 String reqstring=isput?"req=putslot":"req=getslot";
14 String urlstr=baseurl+"?"+reqstring+"&seq="+sequencenumber;
16 urlstr += "&max="+maxentries;
17 return new URL(urlstr);
20 public Slot[] putSlot(Slot slot, int max) throws IOException{
21 long sequencenumber=slot.getSequenceNumber();
22 URL url=buildRequest(true, sequencenumber, max);
23 URLConnection con=url.openConnection();
24 HttpURLConnection http = (HttpURLConnection) con;
25 http.setRequestMethod("POST");
26 http.setFixedLengthStreamingMode(slot.getBytes().length);
27 http.setDoOutput(true);
29 OutputStream os=http.getOutputStream();
30 os.write(slot.getBytes());
31 System.out.println(http.getResponseMessage());
33 InputStream is=http.getInputStream();
34 DataInputStream dis=new DataInputStream(is);
35 byte[] resptype=new byte[7];
36 dis.readFully(resptype);
37 if (Arrays.equals(resptype, "getslot".getBytes()))
38 return processSlots(dis, sequencenumber);
39 else if (Arrays.equals(resptype, "putslot".getBytes()))
42 throw new Error("Bad response to putslot");
45 public Slot[] getSlots(long sequencenumber) throws IOException {
46 URL url=buildRequest(false, sequencenumber, 0);
47 URLConnection con=url.openConnection();
48 HttpURLConnection http = (HttpURLConnection) con;
49 http.setRequestMethod("POST");
51 System.out.println(http.getResponseMessage());
52 InputStream is=http.getInputStream();
54 DataInputStream dis=new DataInputStream(is);
55 byte[] resptype=new byte[7];
56 dis.readFully(resptype);
57 if (!Arrays.equals(resptype, "getslot".getBytes()))
58 throw new Error("Bad Response: "+new String(resptype));
60 return processSlots(dis, sequencenumber);
63 Slot[] processSlots(DataInputStream dis, long sequencenumber) throws IOException {
64 int numberofslots=dis.readInt();
65 int[] sizesofslots=new int[numberofslots];
66 Slot[] slots=new Slot[numberofslots];
67 System.out.println(numberofslots);
68 for(int i=0;i<numberofslots;i++)
69 sizesofslots[i]=dis.readInt();
71 for(int i=0;i<numberofslots;i++) {
72 byte[] data=new byte[sizesofslots[i]];
74 slots[i]=new Slot(sequencenumber+i, data);