+ @Override
+ public void open(Metadata metadata) throws IOException {
+ logger.info(String.format("Connecting to %s:%d...", server, port));
+ Socket socket = new Socket(server, port);
+ logger.info("Connected.");
+ socketOutputStream = socket.getOutputStream();
+ InputStream socketInputStream = socket.getInputStream();
+
+ sendLine(socketOutputStream, String.format("SOURCE /%s ICE/1.0", mountPoint));
+ sendLine(socketOutputStream, String.format("Authorization: Basic %s", generatePassword(password)));
+ sendLine(socketOutputStream, String.format("Content-Type: %s", getContentType(metadata)));
+ sendLine(socketOutputStream, String.format("ICE-Name: %s", serverName));
+ sendLine(socketOutputStream, String.format("ICE-Description: %s", serverDescription));
+ sendLine(socketOutputStream, String.format("ICE-Genre: %s", genre));
+ sendLine(socketOutputStream, String.format("ICE-Public: %d", publishServer ? 1 : 0));
+ sendLine(socketOutputStream, "");
+ socketOutputStream.flush();
+
+ new Thread(new InputStreamDrainer(socketInputStream)).start();
+
+ metadataUpdated(metadata);
+ }
+
+ @Override
+ public void close() {
+ try {
+ Closeables.close(socketOutputStream, true);
+ } catch (IOException e) {
+ /* will never throw. */