package com.android.volley.toolbox.multipart; import java.util.Random; import org.apache.http.util.EncodingUtils; import android.text.TextUtils; import com.android.volley.misc.MultipartUtils; /** * @author <a href="mailto:vit at cleverua.com">Vitaliy Khudenko</a> */ /* package */ class Boundary { /* The pool of ASCII chars to be used for generating a multipart boundary. */ private final static char[] MULTIPART_CHARS = "-_1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray(); //$NON-NLS-1$ private final String boundary; private final byte[] startingBoundary; private final byte[] closingBoundary; /* package */ Boundary(String boundary) { if (TextUtils.isEmpty(boundary)) { boundary = generateBoundary(); } this.boundary = boundary; final String starting = "--" + boundary + MultipartUtils.CRLF; //$NON-NLS-1$ final String closing = "--" + boundary + "--" + MultipartUtils.CRLF; //$NON-NLS-1$ startingBoundary = EncodingUtils.getAsciiBytes(starting); closingBoundary = EncodingUtils.getAsciiBytes(closing); } /* package */ String getBoundary() { return boundary; } /* package */ byte[] getStartingBoundary() { return startingBoundary; } /* package */ byte[] getClosingBoundary() { return closingBoundary; } private static String generateBoundary() { // Boundary delimiters must not appear within the encapsulated material, // and must be no longer than 70 characters, not counting the two // leading hyphens. Random rand = new Random(); final int count = rand.nextInt(11) + 30; // a random size from 30 to 40 StringBuilder buffer = new StringBuilder(count); for (int i = 0; i < count; i++) { buffer.append(MULTIPART_CHARS[rand.nextInt(MULTIPART_CHARS.length)]); } return buffer.toString(); } }