/*
* Copyright 2016 Sam Sun <me@samczsun.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.samczsun.skype4j.exceptions;
import com.samczsun.skype4j.internal.ExceptionHandler;
import com.samczsun.skype4j.internal.Utils;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.nio.charset.StandardCharsets;
/**
* Thrown when an exception occurs while connecting to an endpoint
*/
public class ConnectionException extends SkypeException {
private int responseCode;
private String responseMessage;
private String message;
public ConnectionException(String cause, HttpURLConnection connection) throws IOException {
super(null);
this.responseCode = connection.getResponseCode();
this.responseMessage = connection.getResponseMessage();
StringBuilder messageBuilder = new StringBuilder(System.lineSeparator());
messageBuilder.append("\t\t").append("Cause: ").append(cause).append(System.lineSeparator());
messageBuilder.append("\t\t").append("Response: ").append(responseCode).append(" ").append(responseMessage).append(System.lineSeparator());
InputStream readFrom = null;
try {
readFrom = connection.getInputStream();
} catch (IOException e) {
readFrom = connection.getErrorStream();
}
messageBuilder.append("\t\t").append("Begin Message ")
.append(System.lineSeparator())
.append(System.lineSeparator());
if (readFrom != null) {
StringWriter errorLogger = new StringWriter();
PrintWriter printWriter = new PrintWriter(errorLogger);
try {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Utils.copy(readFrom, outputStream);
String result = outputStream.toString("UTF-8");
messageBuilder.append(result);
} catch (IOException e) {
e.printStackTrace(printWriter);
messageBuilder.append(System.lineSeparator())
.append("Exception: ")
.append(System.lineSeparator())
.append(errorLogger.toString())
.append(System.lineSeparator());
}
} else {
messageBuilder.append("There was no message");
}
messageBuilder.append(System.lineSeparator())
.append(System.lineSeparator())
.append("\t\t").append("End message")
.append(System.lineSeparator());
message = messageBuilder.toString();
}
public ConnectionException(String cause, IOException nested) {
super(cause, nested);
}
public int getResponseCode() {
return this.responseCode;
}
public String getResponseMessage() {
return this.responseMessage;
}
@Override
public String getMessage() {
return message;
}
}