-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCBBoundary.java
More file actions
68 lines (52 loc) · 2.37 KB
/
CBBoundary.java
File metadata and controls
68 lines (52 loc) · 2.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/*
Copyright (c) 2013 Cloudbase.io Limited
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.cloudbase;
import java.util.Random;
import org.apache.http.util.EncodingUtils;
class CBBoundary {
/* 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 */ CBBoundary(String boundary) {
if (boundary == null || "".equals(boundary)) {
boundary = generateBoundary();
}
this.boundary = boundary;
final String starting = "--" + boundary + CBMultipartEntity.CRLF; //$NON-NLS-1$
final String closing = "--" + boundary + "--" + CBMultipartEntity.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();
}
}