Commit fd3d3cbe authored by Matthew Finkel's avatar Matthew Finkel Committed by Matthew Finkel
Browse files

Bug 28125 - Prevent non-Necko network connections

parent 71292f25
Loading
Loading
Loading
Loading
+1 −48
Original line number Diff line number Diff line
@@ -488,54 +488,7 @@ public class GeckoMediaDrmBridgeV21 implements GeckoMediaDrm {

        @Override
        protected Void doInBackground(final Void... params) {
            HttpURLConnection urlConnection = null;
            BufferedReader in = null;
            try {
                URI finalURI = new URI(mURL + "&signedRequest=" + URLEncoder.encode(new String(mDrmRequest), "UTF-8"));
                urlConnection = (HttpURLConnection) ProxySelector.openConnectionWithProxy(finalURI);
                urlConnection.setRequestMethod("POST");
                if (DEBUG) Log.d(LOGTAG, "Provisioning, posting url =" + finalURI.toString());

                // Add data
                urlConnection.setRequestProperty("Accept", "*/*");
                urlConnection.setRequestProperty("User-Agent", getCDMUserAgent());
                urlConnection.setRequestProperty("Content-Type", "application/json");

                // Execute HTTP Post Request
                urlConnection.connect();

                int responseCode = urlConnection.getResponseCode();
                if (responseCode == HttpURLConnection.HTTP_OK) {
                    in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), StringUtils.UTF_8));
                    String inputLine;
                    StringBuffer response = new StringBuffer();

                    while ((inputLine = in.readLine()) != null) {
                        response.append(inputLine);
                    }
                    in.close();
                    mResponseBody = String.valueOf(response).getBytes(StringUtils.UTF_8);
                    if (DEBUG) Log.d(LOGTAG, "Provisioning, response received.");
                    if (mResponseBody != null) Log.d(LOGTAG, "response length=" + mResponseBody.length);
                } else {
                    Log.d(LOGTAG, "Provisioning, server returned HTTP error code :" + responseCode);
                }
            } catch (IOException e) {
                Log.e(LOGTAG, "Got exception during posting provisioning request ...", e);
            } catch (URISyntaxException e) {
                Log.e(LOGTAG, "Got exception during creating uri ...", e);
            } finally {
                if (urlConnection != null) {
                    urlConnection.disconnect();
                }
                try {
                    if (in != null) {
                        in.close();
                    }
                } catch (IOException e) {
                    Log.e(LOGTAG, "Exception during closing in ...", e);
                }
            }
            Log.i(LOGTAG, "This is Tor Browser. Skipping.");
            return null;
        }

+3 −44
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import java.util.regex.Pattern;
import java.util.zip.GZIPInputStream;

import org.mozilla.gecko.util.ProxySelector;

/**
 * An {@link HttpDataSource} that uses Android's {@link HttpURLConnection}.
 *
@@ -516,50 +517,8 @@ public class DefaultHttpDataSource extends BaseDataSource implements HttpDataSou
      boolean followRedirects,
      Map<String, String> requestParameters)
      throws IOException, URISyntaxException {
    /**
     * Tor Project modified the way the connection object was created. For the sake of
     * simplicity, instead of duplicating the whole file we changed the connection object
     * to use the ProxySelector.
     */
    HttpURLConnection connection = (HttpURLConnection) ProxySelector.openConnectionWithProxy(url.toURI());

    connection.setConnectTimeout(connectTimeoutMillis);
    connection.setReadTimeout(readTimeoutMillis);

    Map<String, String> requestHeaders = new HashMap<>();
    if (defaultRequestProperties != null) {
      requestHeaders.putAll(defaultRequestProperties.getSnapshot());
    }
    requestHeaders.putAll(requestProperties.getSnapshot());
    requestHeaders.putAll(requestParameters);

    for (Map.Entry<String, String> property : requestHeaders.entrySet()) {
      connection.setRequestProperty(property.getKey(), property.getValue());
    }

    if (!(position == 0 && length == C.LENGTH_UNSET)) {
      String rangeRequest = "bytes=" + position + "-";
      if (length != C.LENGTH_UNSET) {
        rangeRequest += (position + length - 1);
      }
      connection.setRequestProperty("Range", rangeRequest);
    }
    connection.setRequestProperty("User-Agent", userAgent);
    connection.setRequestProperty("Accept-Encoding", allowGzip ? "gzip" : "identity");
    connection.setInstanceFollowRedirects(followRedirects);
    connection.setDoOutput(httpBody != null);
    connection.setRequestMethod(DataSpec.getStringForHttpMethod(httpMethod));

    if (httpBody != null) {
      connection.setFixedLengthStreamingMode(httpBody.length);
      connection.connect();
      OutputStream os = connection.getOutputStream();
      os.write(httpBody);
      os.close();
    } else {
      connection.connect();
    }
    return connection;
    Log.i(TAG, "This is Tor Browser. Skipping.");
    throw new IOException();
  }

  /** Creates an {@link HttpURLConnection} that is connected with the {@code url}. */