Browse Source

toMethod parameter allows put/upload

Martin Kunz 5 years ago
parent
commit
2a8ab97425

+ 49 - 48
src/main/java/com/acdp/transceivr/LoadTools.java

@@ -21,17 +21,17 @@ public class LoadTools {
 
     private static void download(Transfer t, ProgressListener progressListener) throws IOException {
         Request request = new Request.Builder()
-                .url(t.from)
-                .build();
+            .url(t.from)
+            .build();
 
         OkHttpClient client = new OkHttpClient.Builder()
-                .addNetworkInterceptor(chain -> {
-                    Response originalResponse = chain.proceed(chain.request());
-                    return originalResponse.newBuilder()
-                            .body(new ProgressResponseBody(originalResponse.body(), progressListener))
-                            .build();
-                })
-                .build();
+            .addNetworkInterceptor(chain -> {
+                Response originalResponse = chain.proceed(chain.request());
+                return originalResponse.newBuilder()
+                        .body(new ProgressResponseBody(originalResponse.body(), progressListener))
+                        .build();
+            })
+            .build();
         var call = client.newCall(request);
         t.call = call;
         call.enqueue(new Callback() {
@@ -71,59 +71,60 @@ public class LoadTools {
         };
 
         OkHttpClient client = new OkHttpClient();
-        Request request = new Request.Builder()
-                .url(t.to)
-                .post(requestBody)
-                .build();
+        var requestBuilder = new Request.Builder().url(t.to);
+        if(t.toMethod.equals("PUT"))
+            requestBuilder.put(requestBody);
+        else
+            requestBuilder.post(requestBody);
 
+        var request=requestBuilder.build();
         client.newCall(request).enqueue(
-                new Callback() {
-                    @Override
-                    public void onFailure(Call call, IOException e) {
-                        t.uploadError = e.toString();
+            new Callback() {
+                @Override
+                public void onFailure(Call call, IOException e) {
+                    t.uploadError = e.toString();
+                    finishTransfer(t);
+                }
+
+                @Override
+                public void onResponse(Call call, Response response) throws IOException {
+                    if (!response.isSuccessful()) {
+                        t.uploadError = response.toString();
                         finishTransfer(t);
                     }
-
-                    @Override
-                    public void onResponse(Call call, Response response) throws IOException {
-                        if (!response.isSuccessful()) {
-                            t.uploadError = response.toString();
-                            finishTransfer(t);
-                        }
-                        t.uploadCode = response.code();
-                        t.uploadResponseBody = response.body().string();
-                        t.uploadDone = true;
-                        if (t.cpeeCallback != null) {
-                            try {
-                                OkHttpClient client = new OkHttpClient();
-                                Request request = new Request.Builder()
-                                        .url(t.cpeeCallback + "/")
-                                        .put(RequestBody.create(MEDIA_TYPE_JSON, "[{}]"))
-                                        .build();
-                                logger.info("putting to {}", t.cpeeCallback);
-                                Response res = client.newCall(request).execute();
-                                logger.info("result {}", res.toString());
-                                t.cpeeCallbackResult = res.body().string();
-                                t.cpeeCallbackCode = res.code();
-                                t.cpeeCallbackMessage = res.message();
-                            } catch (Exception e) {
-                                logger.warn("cpee callback failed", e);
-                                t.cpeeCallbackError = e.getMessage();
-                                finishTransfer(t);
-                            }
-                        }
-                        else {
+                    t.uploadCode = response.code();
+                    t.uploadResponseBody = response.body().string();
+                    t.uploadDone = true;
+                    if (t.cpeeCallback != null) {
+                        try {
+                            OkHttpClient client = new OkHttpClient();
+                            Request request = new Request.Builder()
+                                    .url(t.cpeeCallback + "/")
+                                    .put(RequestBody.create(MEDIA_TYPE_JSON, "[{}]"))
+                                    .build();
+                            logger.info("putting to {}", t.cpeeCallback);
+                            Response res = client.newCall(request).execute();
+                            logger.info("result {}", res.toString());
+                            t.cpeeCallbackResult = res.body().string();
+                            t.cpeeCallbackCode = res.code();
+                            t.cpeeCallbackMessage = res.message();
+                        } catch (Exception e) {
+                            logger.warn("cpee callback failed", e);
+                            t.cpeeCallbackError = e.getMessage();
                             finishTransfer(t);
                         }
                     }
+                    else {
+                        finishTransfer(t);
+                    }
                 }
+            }
         );
     }
 
     public static void startTransfer(Transfer t) throws IOException {
         final ProgressListener progressListener = new ProgressListener() {
             boolean firstUpdate = true;
-
             @Override
             public void update(long bytesRead, long contentLength, boolean done) {
                 if (done) {

+ 2 - 0
src/main/java/com/acdp/transceivr/Transfer.java

@@ -60,6 +60,8 @@ public class Transfer {
         js.add("cpeeCallbackError", cpeeCallbackError);
         js.add("finished", finished);
         js.add("finishedAT", finishedAT);
+        js.add("toMethod", toMethod);
+
 
 
 

+ 8 - 1
src/main/java/com/acdp/transceivr/WebServer.java

@@ -55,6 +55,13 @@ public class WebServer {
             res.status(200);
             return "";
         });
+        put("/null", (req, res) -> {
+            var is = req.raw().getInputStream();
+            var ba = new byte[BS];
+            while (is.read(ba)!=-1);
+            res.status(200);
+            return "";
+        });
         post("/cancel", (req, res) -> {
             int id = Integer.parseInt(req.queryParams("id"));
             var t = uploads.get(id);
@@ -75,7 +82,7 @@ public class WebServer {
                 Transfer t = new Transfer(nextID++);
                 t.from = req.queryParams("from");
                 t.to = req.queryParams("to");
-                t.toMethod="PUT";
+                t.toMethod=req.queryParamOrDefault("toMethod","POST");
                 t.cpeeCallback = req.headers("CPEE-CALLBACK");
                 t.cpeeCallbackId = req.headers("CPEE-CALLBACK-ID");
                 t.cpeeInstanceURL = req.headers("CPEE-INSTANCE-URL");

+ 19 - 15
src/main/resources/webroot/index.html

@@ -22,10 +22,13 @@
 <div id="app">
     <input v-model="from" placeholder="from" size="80"><br>
     <input v-model="to" placeholder="to" size="80"><br>
+    <select v-model="toMethod">
+        <option value="POST">POST</option>
+        <option value="PUT">PUT</option>
+    </select>
     <button @click="send">Send</button>
     <a href="#" @click="example1">example1</a>
     <a href="#" @click="example2">example2</a>
-
     <table>
         <template v-for="(item, index) in transfers">
             <tr>
@@ -40,31 +43,30 @@
                 </td>
             </tr>
             <tr>
-                <td><button @click="cancel(item.id)">cancel</button>
-                </td>
-                <td>
+    <td><button @click="cancel(item.id)">cancel</button>
+    </td><td>
 <pre>id: {{ item.id}}
 from: {{ item.from}}
+to: {{ item.to}}
 contentLength: {{ item.contentLength }}
 bytesRead: {{ item.bytesRead}}
-uploadError: {{ item.uploadError}}
-uploadCode: {{ item.uploadCode}}
-uploadResponseBody: {{ item.uploadResponseBody}}
-uploadDone: {{ item.uploadDone}}
+downloadError: {{ item.downloadError}}
+downloadCode: {{ item.downloadCode}}
+downloadDone: {{ item.downloadDone}}
 finished: {{ item.finished}}
-
+finishedAT: {{ item.finishedAT}}
 </pre>
 </td>
 <td><pre>rate: {{ item.rate}}k/s
-to: {{ item.to}}
-downloadError: {{ item.downloadError}}
-downloadCode: {{ item.downloadCode}}
-downloadDone: {{ item.downloadDone}}
+toMethod: {{ item.toMethod}}
+uploadError: {{ item.uploadError}}
+uploadCode: {{ item.uploadCode}}
+uploadResponseBody: {{ item.uploadResponseBody}}
+uploadDone: {{ item.uploadDone}}
 cpeeCallbackResult: {{ item.cpeeCallbackResult}}
 cpeeCallbackCode: {{ item.cpeeCallbackCode}}
 cpeeCallbackMessage: {{ item.cpeeCallbackMessage}}
 cpeeCallbackError: {{ item.cpeeCallbackError}}
-finishedAT: {{ item.finishedAT}}
 </pre></td>
 </tr>
 </template>
@@ -78,7 +80,8 @@ finishedAT: {{ item.finishedAT}}
             input: '',
             transfers: [],
             from: '',
-            to: ''
+            to: '',
+            toMethod: 'POST'
         },
         created: function () {
             setInterval(this.update, 330);
@@ -97,6 +100,7 @@ finishedAT: {{ item.finishedAT}}
                 let data = new URLSearchParams();
                 data.append('from', this.from);
                 data.append('to', this.to);
+                data.append('toMethod', this.toMethod);
                 fetch('/xfer', {
                     method: "POST",
                     body: data