From 2dfd7b6611363b542a7967ffbba0d32ce5eb5b6f Mon Sep 17 00:00:00 2001 From: Johann Latocha Date: Tue, 31 Jul 2012 19:32:18 +0200 Subject: Delete image --- src/main/java/org/openslx/dnbd3/DNBD3Server.java | 89 +++++++++++++++--------- 1 file changed, 57 insertions(+), 32 deletions(-) (limited to 'src/main/java/org/openslx/dnbd3/DNBD3Server.java') diff --git a/src/main/java/org/openslx/dnbd3/DNBD3Server.java b/src/main/java/org/openslx/dnbd3/DNBD3Server.java index 1ac2e73..4830010 100644 --- a/src/main/java/org/openslx/dnbd3/DNBD3Server.java +++ b/src/main/java/org/openslx/dnbd3/DNBD3Server.java @@ -18,63 +18,76 @@ public class DNBD3Server { private static final int CMDSTOP = 0; private static final int CMDRELOAD = 1; private static final int CMDINFO = 2; - private static final int CMDCONFIG = 3; + private static final int CMDADDIMG = 3; + private static final int CMDDELIMG = 4; private static final String HOST = "127.0.0.1"; private static final int PORT = 5004; public void doReload() throws IOException, DNBD3Exception { - Socket sock = new Socket(HOST, PORT); - sendHeader(sock, new DNBD3Header(CMDRELOAD, 0, 0)); - receiveHeader(sock); - sock.close(); + sndCommand(CMDRELOAD); } public void doShutdown() throws IOException, DNBD3Exception { - Socket sock = new Socket(HOST, PORT); - sendHeader(sock, new DNBD3Header(CMDSTOP, 0, 0)); - receiveHeader(sock); - sock.close(); + sndCommand(CMDSTOP); } public void addImage(Image image) throws Exception { Info info = new Info(); info.getImages().add(image); - ByteArrayOutputStream os = new ByteArrayOutputStream(); - new Persister().write(info, os); - Socket sock = new Socket(HOST, PORT); - sendHeader(sock, new DNBD3Header(CMDCONFIG, os.size(), 0)); - sock.getOutputStream().write(os.toByteArray()); - receiveHeader(sock); - sock.close(); + sndData(CMDADDIMG, info); + doReload(); + } + + public void delImage(Image image) throws Exception { + Info info = new Info(); + info.getImages().add(image); + sndData(CMDDELIMG, info); + doReload(); } public List getImages() throws Exception { - Socket sock = new Socket(HOST, PORT); - sendHeader(sock, new DNBD3Header(CMDINFO, 0, 0)); - receiveHeader(sock); - Info info = new Persister().read(Info.class, sock.getInputStream()); - sock.close(); - return info.getImages(); + return rcvData().getImages(); } public List getClients() throws Exception { - Socket sock = new Socket(HOST, PORT); - sendHeader(sock, new DNBD3Header(CMDINFO, 0, 0)); - receiveHeader(sock); - Info info = new Persister().read(Info.class, sock.getInputStream()); - sock.close(); - return info.getClients(); + return rcvData().getClients(); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - private void sendHeader(Socket sock, DNBD3Header header) throws IOException { + private void sndCommand(int cmd) throws IOException, DNBD3Exception { + Socket sock = new Socket(HOST, PORT); + sndHeader(sock, new DNBD3Header(cmd, 0, 0)); + rcvHeader(sock); + sock.close(); + } + + private void sndData(int cmd, Info info) throws Exception { + ByteArrayOutputStream os = new ByteArrayOutputStream(); + new Persister().write(info, os); + Socket sock = new Socket(HOST, PORT); + sndHeader(sock, new DNBD3Header(cmd, os.size(), 0)); + sock.getOutputStream().write(os.toByteArray()); + rcvHeader(sock); + sock.close(); + } + + private Info rcvData() throws Exception { + Socket sock = new Socket(HOST, PORT); + sndHeader(sock, new DNBD3Header(CMDINFO, 0, 0)); + rcvHeader(sock); + Info info = new Persister().read(Info.class, sock.getInputStream()); + sock.close(); + return info; + } + + private void sndHeader(Socket sock, DNBD3Header header) throws IOException { OutputStream os = sock.getOutputStream(); os.write(header.toByteArray()); } - private DNBD3Header receiveHeader(Socket sock) throws IOException, DNBD3Exception { + private DNBD3Header rcvHeader(Socket sock) throws IOException, DNBD3Exception { DNBD3Header header = new DNBD3Header(); InputStream is = sock.getInputStream(); byte[] bytes = ByteBuffer.allocate(12).array(); @@ -86,8 +99,8 @@ public class DNBD3Server { case 0: return header; - case DNBD3Header.ERROR_IMAGE_NOT_FOUND: - throw new DNBD3Exception(DNBD3Header.ERROR_IMAGE_NOT_FOUND, + case DNBD3Header.ERROR_FILE_NOT_FOUND: + throw new DNBD3Exception(DNBD3Header.ERROR_FILE_NOT_FOUND, "Image file does not exist or is not readable"); case DNBD3Header.ERROR_IMAGE_ALREADY_EXISTS: @@ -97,6 +110,18 @@ public class DNBD3Server { case DNBD3Header.ERROR_CONFIG_FILE_PERMISSIONS: throw new DNBD3Exception(DNBD3Header.ERROR_CONFIG_FILE_PERMISSIONS, "Config file is not writable"); + + case DNBD3Header.ERROR_IMAGE_NOT_FOUND: + throw new DNBD3Exception(DNBD3Header.ERROR_IMAGE_NOT_FOUND, + "Image does not exist"); + + case DNBD3Header.ERROR_RID: + throw new DNBD3Exception(DNBD3Header.ERROR_RID, + "Delete with rid=0 is not allowed"); + + case DNBD3Header.ERROR_IMAGE_IN_USE: + throw new DNBD3Exception(DNBD3Header.ERROR_IMAGE_IN_USE, + "Image is in use"); default: throw new DNBD3Exception(DNBD3Header.ERROR_UNKNOWN, -- cgit v1.2.3-55-g7522