package com.android.volley.toolbox.multipart;
import static com.android.volley.misc.MultipartUtils.*;
import org.apache.http.util.ByteArrayBuffer;
import org.apache.http.util.EncodingUtils;
/**
* Parent class for FilePart and StringPart.
*
* @author <a href="mailto:vit at cleverua.com">Vitaliy Khudenko</a>
*/
/* package */ abstract class BasePart implements Part {
protected interface IHeadersProvider {
public String getContentDisposition();
public String getContentType();
public String getContentTransferEncoding();
}
protected IHeadersProvider headersProvider; // must be initialized in descendant constructor
private byte[] header;
protected byte[] getHeader(Boundary boundary) {
if (header == null) {
header = generateHeader(boundary); // lazy init
}
return header;
}
private byte[] generateHeader(Boundary boundary) {
if (headersProvider == null) {
throw new RuntimeException("Uninitialized headersProvider"); //$NON-NLS-1$
}
final ByteArrayBuffer buf = new ByteArrayBuffer(256);
append(buf, boundary.getStartingBoundary());
append(buf, headersProvider.getContentDisposition());
append(buf, CRLF_BYTES);
append(buf, headersProvider.getContentType());
append(buf, CRLF_BYTES);
//ContentTransferEncoding causes bug
//append(buf, headersProvider.getContentTransferEncoding());
//append(buf, CRLF_BYTES);
append(buf, CRLF_BYTES);
return buf.toByteArray();
}
private static void append(ByteArrayBuffer buf, String data) {
append(buf, EncodingUtils.getAsciiBytes(data));
}
private static void append(ByteArrayBuffer buf, byte[] data) {
buf.append(data, 0, data.length);
}
}