Package freenet.client.filter

Examples of freenet.client.filter.FilterMIMEType


    NETWORK_THREAT_LEVEL netLevel = core.node.securityLevels.getNetworkThreatLevel();
    boolean filterChecked = !(((threatLevel == PHYSICAL_THREAT_LEVEL.LOW &&
            netLevel == NETWORK_THREAT_LEVEL.LOW)) || disableFiltration);
    if((filterChecked) && mimeType != null && !mimeType.equals("application/octet-stream") &&
      !mimeType.equals("")) {
      FilterMIMEType type = ContentFilter.getMIMEType(mimeType);
      if((type == null || (!(type.safeToRead || type.readFilter != null))) &&
                !(threatLevel == PHYSICAL_THREAT_LEVEL.HIGH ||
                threatLevel == PHYSICAL_THREAT_LEVEL.MAXIMUM ||
                netLevel == NETWORK_THREAT_LEVEL.HIGH ||
                netLevel == NETWORK_THREAT_LEVEL.MAXIMUM))
View Full Code Here


              failedUnknownMIMEType.put(mimeType, list);
            }
            list.add(download);
          } else if(failureCode == FetchExceptionMode.CONTENT_VALIDATION_BAD_MIME) {
            mimeType = ContentFilter.stripMIMEType(mimeType);
            FilterMIMEType type = ContentFilter.getMIMEType(mimeType);
            LinkedList<DownloadRequestStatus> list;
            if(type == null) {
              Logger.error(this, "Bad MIME failure code yet MIME is "+mimeType+" which does not have a handler!");
              list = failedUnknownMIMEType.get(mimeType);
              if(list == null) {
                list = new LinkedList<DownloadRequestStatus>();
                failedUnknownMIMEType.put(mimeType, list);
              }
            } else {
              list = failedBadMIMEType.get(mimeType);
              if(list == null) {
                list = new LinkedList<DownloadRequestStatus>();
                failedBadMIMEType.put(mimeType, list);
              }
            }
            list.add(download);
          } else {
            failedDownload.add(download);
          }
        } else {
          short prio = download.getPriority();
          if(prio < lowestQueuedPrio)
            lowestQueuedPrio = prio;
          uncompletedDownload.add(download);
          long size = download.getDataSize();
          if(size > 0)
            totalQueuedDownloadSize += size;
        }
        added = true;
      } else if(req instanceof UploadFileRequestStatus && uploads) {
        UploadFileRequestStatus upload = (UploadFileRequestStatus)req;
        if(upload.hasSucceeded()) {
          completedUpload.add(upload);
        } else if(upload.hasFinished()) {
          failedUpload.add(upload);
        } else {
          short prio = upload.getPriority();
          if(prio < lowestQueuedPrio)
            lowestQueuedPrio = prio;
          uncompletedUpload.add(upload);
        }
        long size = upload.getDataSize();
        if(size > 0)
          totalQueuedUploadSize += size;
        added = true;
      } else if(req instanceof UploadDirRequestStatus && uploads) {
        UploadDirRequestStatus upload = (UploadDirRequestStatus)req;
        if(upload.hasSucceeded()) {
          completedDirUpload.add(upload);
        } else if(upload.hasFinished()) {
          failedDirUpload.add(upload);
        } else {
          short prio = upload.getPriority();
          if(prio < lowestQueuedPrio)
            lowestQueuedPrio = prio;
          uncompletedDirUpload.add(upload);
        }
        long size = upload.getTotalDataSize();
        if(size > 0)
          totalQueuedUploadSize += size;
                added = true;
      }
    }
    if(!added) {
        return sendEmptyQueuePage(ctx, pageMaker);
    }
    Logger.minor(this, "Total queued downloads: "+SizeUtil.formatSize(totalQueuedDownloadSize));
    Logger.minor(this, "Total queued uploads: "+SizeUtil.formatSize(totalQueuedUploadSize));

    Comparator<RequestStatus> jobComparator = new Comparator<RequestStatus>() {
      @Override
      public int compare(RequestStatus firstRequest, RequestStatus secondRequest) {
       
        if(firstRequest == secondRequest) return 0; // Short cut.
       
        int result = 0;
        boolean isSet = true;

        if(request.isParameterSet("sortBy")){
          final String sortBy = request.getParam("sortBy");

          if(sortBy.equals("id")){
            result = firstRequest.getIdentifier().compareToIgnoreCase(secondRequest.getIdentifier());
            if(result == 0)
              result = firstRequest.getIdentifier().compareTo(secondRequest.getIdentifier());
          }else if(sortBy.equals("size")){
            result = Fields.compare(firstRequest.getTotalBlocks(), secondRequest.getTotalBlocks());
          }else if(sortBy.equals("progress")){
            boolean firstFinalized = firstRequest.isTotalFinalized();
            boolean secondFinalized = secondRequest.isTotalFinalized();
            if(firstFinalized && !secondFinalized)
              result = 1;
            else if(secondFinalized && !firstFinalized)
              result = -1;
            else {
              double firstProgress = ((double)firstRequest.getFetchedBlocks()) / ((double)firstRequest.getMinBlocks());
              double secondProgress = ((double)secondRequest.getFetchedBlocks()) / ((double)secondRequest.getMinBlocks());
              result = Fields.compare(firstProgress, secondProgress);
            }
          } else if (sortBy.equals("lastActivity")) {
            result = Fields.compare(firstRequest.getLastActivity(), secondRequest.getLastActivity());
          }else
            isSet=false;
        }else
          isSet=false;

        if(!isSet){
          result = Fields.compare(firstRequest.getPriority(), secondRequest.getPriority());
          if(result == 0)
            result = firstRequest.getIdentifier().compareTo(secondRequest.getIdentifier());
        }

        if(result == 0){
          return 0;
        }else if(request.isParameterSet("reversed")){
          isReversed = true;
          return result > 0 ? -1 : 1;
        }else{
          isReversed = false;
          return result < 0 ? -1 : 1;
        }
      }
    };

    Collections.sort(completedDownloadToDisk, jobComparator);
    Collections.sort(completedDownloadToTemp, jobComparator);
    Collections.sort(completedUpload, jobComparator);
    Collections.sort(completedDirUpload, jobComparator);
    Collections.sort(failedDownload, jobComparator);
    Collections.sort(failedUpload, jobComparator);
    Collections.sort(failedDirUpload, jobComparator);
    Collections.sort(uncompletedDownload, jobComparator);
    Collections.sort(uncompletedUpload, jobComparator);
    Collections.sort(uncompletedDirUpload, jobComparator);

    String pageName;
    if(uploads)
      pageName =
        "(" + (uncompletedDirUpload.size() + uncompletedUpload.size()) +
        '/' + (failedDirUpload.size() + failedUpload.size()) +
        '/' + (completedDirUpload.size() + completedUpload.size()) +
        ") "+l10n("titleUploads");
    else
      pageName =
        "(" + uncompletedDownload.size() +
        '/' + failedDownload.size() +
        '/' + (completedDownloadToDisk.size() + completedDownloadToTemp.size()) +
        ") "+l10n("titleDownloads");

    PageNode page = pageMaker.getPageNode(pageName, ctx);
    HTMLNode pageNode = page.outer;
    HTMLNode contentNode = page.content;

    /* add alert summary box */
    if(ctx.isAllowedFullAccess())
      contentNode.addChild(ctx.getAlertManager().createSummary());

    /* navigation bar */
    InfoboxNode infobox = pageMaker.getInfobox("navbar", l10n("requestNavigation"), null, false);
    HTMLNode navigationBar = infobox.outer;
    HTMLNode navigationContent = infobox.content.addChild("ul");
    boolean includeNavigationBar = false;
    if (!completedDownloadToTemp.isEmpty()) {
      navigationContent.addChild("li").addChild("a", "href", "#completedDownloadToTemp", l10n("completedDtoTemp", new String[]{ "size" }, new String[]{ String.valueOf(completedDownloadToTemp.size()) }));
      includeNavigationBar = true;
    }
    if (!completedDownloadToDisk.isEmpty()) {
      navigationContent.addChild("li").addChild("a", "href", "#completedDownloadToDisk", l10n("completedDtoDisk", new String[]{ "size" }, new String[]{ String.valueOf(completedDownloadToDisk.size()) }));
      includeNavigationBar = true;
    }
    if (!completedUpload.isEmpty()) {
      navigationContent.addChild("li").addChild("a", "href", "#completedUpload", l10n("completedU", new String[]{ "size" }, new String[]{ String.valueOf(completedUpload.size()) }));
      includeNavigationBar = true;
    }
    if (!completedDirUpload.isEmpty()) {
      navigationContent.addChild("li").addChild("a", "href", "#completedDirUpload", l10n("completedDU", new String[]{ "size" }, new String[]{ String.valueOf(completedDirUpload.size()) }));
      includeNavigationBar = true;
    }
    if (!failedDownload.isEmpty()) {
      navigationContent.addChild("li").addChild("a", "href", "#failedDownload", l10n("failedD", new String[]{ "size" }, new String[]{ String.valueOf(failedDownload.size()) }));
      includeNavigationBar = true;
    }
    if (!failedUpload.isEmpty()) {
      navigationContent.addChild("li").addChild("a", "href", "#failedUpload", l10n("failedU", new String[]{ "size" }, new String[]{ String.valueOf(failedUpload.size()) }));
      includeNavigationBar = true;
    }
    if (!failedDirUpload.isEmpty()) {
      navigationContent.addChild("li").addChild("a", "href", "#failedDirUpload", l10n("failedDU", new String[]{ "size" }, new String[]{ String.valueOf(failedDirUpload.size()) }));
      includeNavigationBar = true;
    }
    if (failedUnknownMIMEType.size() > 0) {
      String[] types = failedUnknownMIMEType.keySet().toArray(new String[failedUnknownMIMEType.size()]);
      Arrays.sort(types);
      for(String type : types) {
        String atype = type.replace("-", "--").replace('/', '-');
        navigationContent.addChild("li").addChild("a", "href", "#failedDownload-unknowntype-"+atype, l10n("failedDUnknownMIME", new String[]{ "size", "type" }, new String[]{ String.valueOf(failedUnknownMIMEType.get(type).size()), type }));
      }
    }
    if (failedBadMIMEType.size() > 0) {
      String[] types = failedBadMIMEType.keySet().toArray(new String[failedBadMIMEType.size()]);
      Arrays.sort(types);
      for(String type : types) {
        String atype = type.replace("-", "--").replace('/', '-');
        navigationContent.addChild("li").addChild("a", "href", "#failedDownload-badtype-"+atype, l10n("failedDBadMIME", new String[]{ "size", "type" }, new String[]{ String.valueOf(failedBadMIMEType.get(type).size()), type }));
      }
    }
    if (!uncompletedDownload.isEmpty()) {
      navigationContent.addChild("li").addChild("a", "href", "#uncompletedDownload", l10n("DinProgress", new String[]{ "size" }, new String[]{ String.valueOf(uncompletedDownload.size()) }));
      includeNavigationBar = true;
    }
    if (!uncompletedUpload.isEmpty()) {
      navigationContent.addChild("li").addChild("a", "href", "#uncompletedUpload", l10n("UinProgress", new String[]{ "size" }, new String[]{ String.valueOf(uncompletedUpload.size()) }));
      includeNavigationBar = true;
    }
    if (!uncompletedDirUpload.isEmpty()) {
      navigationContent.addChild("li").addChild("a", "href", "#uncompletedDirUpload", l10n("DUinProgress", new String[]{ "size" }, new String[]{ String.valueOf(uncompletedDirUpload.size()) }));
      includeNavigationBar = true;
    }
    if (totalQueuedDownloadSize > 0) {
      navigationContent.addChild("li", l10n("totalQueuedDownloads", "size", SizeUtil.formatSize(totalQueuedDownloadSize)));
      includeNavigationBar = true;
    }
    if (totalQueuedUploadSize > 0) {
      navigationContent.addChild("li", l10n("totalQueuedUploads", "size", SizeUtil.formatSize(totalQueuedUploadSize)));
      includeNavigationBar = true;
    }

        navigationContent.addChild("li").addChild("a", "href", FETCH_KEY_LIST_LOCATION,
                                                  l10n("openKeyList"));

    if (includeNavigationBar) {
      contentNode.addChild(navigationBar);
    }

    final String[] priorityClasses = new String[] {
        l10n("priority0"),
        l10n("priority1"),
        l10n("priority2"),
        l10n("priority3"),
        l10n("priority4"),
        l10n("priority5"),
        l10n("priority6")
    };

    boolean advancedModeEnabled = pageMaker.advancedMode(request, this.container);

    HTMLNode legendContent = pageMaker.getInfobox("legend", l10n("legend"), contentNode, "queue-legend", true);
    HTMLNode legendTable = legendContent.addChild("table", "class", "queue");
    HTMLNode legendRow = legendTable.addChild("tr");
    for(int i=0; i<7; i++){
        if(i > RequestStarter.INTERACTIVE_PRIORITY_CLASS || advancedModeEnabled || i <= lowestQueuedPrio)
            legendRow.addChild("td", "class", "priority" + i, priorityClasses[i]);
    }

    if (SimpleToadletServer.isPanicButtonToBeShown) {
        // There may be persistent downloads etc under other PersistentRequestClient's, so still show it.
      contentNode.addChild(createPanicBox(pageMaker, ctx));
    }

    final QueueColumn[] advancedModeFailure = new QueueColumn[] {
            QueueColumn.IDENTIFIER,
            QueueColumn.FILENAME,
            QueueColumn.SIZE,
            QueueColumn.MIME_TYPE,
            QueueColumn.PROGRESS,
            QueueColumn.REASON,
            QueueColumn.PERSISTENCE,
            QueueColumn.KEY };
   
    final QueueColumn[] simpleModeFailure = new QueueColumn[] {
            QueueColumn.FILENAME,
            QueueColumn.SIZE,
            QueueColumn.PROGRESS,
            QueueColumn.REASON,
            QueueColumn.KEY };

    if (!completedDownloadToTemp.isEmpty()) {
      contentNode.addChild("a", "id", "completedDownloadToTemp");
      HTMLNode completedDownloadsToTempContent = pageMaker.getInfobox("completed_requests", l10n("completedDinTempDirectory", new String[]{ "size" }, new String[]{ String.valueOf(completedDownloadToTemp.size()) }), contentNode, "request-completed", false);
      if (advancedModeEnabled) {
        completedDownloadsToTempContent.addChild(createRequestTable(pageMaker, ctx, completedDownloadToTemp, new QueueColumn[] { QueueColumn.IDENTIFIER, QueueColumn.SIZE, QueueColumn.MIME_TYPE, QueueColumn.PERSISTENCE, QueueColumn.KEY, QueueColumn.COMPAT_MODE }, priorityClasses, advancedModeEnabled, false, "completed-temp", true, true));
      } else {
        completedDownloadsToTempContent.addChild(createRequestTable(pageMaker, ctx, completedDownloadToTemp, new QueueColumn[] { QueueColumn.SIZE, QueueColumn.KEY }, priorityClasses, advancedModeEnabled, false, "completed-temp", true, true));
      }
    }

    if (!completedDownloadToDisk.isEmpty()) {
      contentNode.addChild("a", "id", "completedDownloadToDisk");
      HTMLNode completedToDiskInfoboxContent = pageMaker.getInfobox("completed_requests", l10n("completedDinDownloadDirectory", new String[]{ "size" }, new String[]{ String.valueOf(completedDownloadToDisk.size()) }), contentNode, "request-completed", false);
      if (advancedModeEnabled) {
        completedToDiskInfoboxContent.addChild(createRequestTable(pageMaker, ctx, completedDownloadToDisk, new QueueColumn[] { QueueColumn.IDENTIFIER, QueueColumn.FILENAME, QueueColumn.SIZE, QueueColumn.MIME_TYPE, QueueColumn.PERSISTENCE, QueueColumn.KEY, QueueColumn.COMPAT_MODE }, priorityClasses, advancedModeEnabled, false, "completed-disk", false, true));
      } else {
        completedToDiskInfoboxContent.addChild(createRequestTable(pageMaker, ctx, completedDownloadToDisk, new QueueColumn[] { QueueColumn.FILENAME, QueueColumn.SIZE, QueueColumn.KEY }, priorityClasses, advancedModeEnabled, false, "completed-disk", false, true));
      }
    }

    if (!completedUpload.isEmpty()) {
      contentNode.addChild("a", "id", "completedUpload");
      HTMLNode completedUploadInfoboxContent = pageMaker.getInfobox("completed_requests", l10n("completedU", new String[]{ "size" }, new String[]{ String.valueOf(completedUpload.size()) }), contentNode, "download-completed", false);
      if (advancedModeEnabled) {
        completedUploadInfoboxContent.addChild(createRequestTable(pageMaker, ctx, completedUpload, new QueueColumn[] { QueueColumn.IDENTIFIER, QueueColumn.FILENAME, QueueColumn.SIZE, QueueColumn.MIME_TYPE, QueueColumn.PERSISTENCE, QueueColumn.KEY }, priorityClasses, advancedModeEnabled, true, "completed-upload-file", false, true));
      } else  {
        completedUploadInfoboxContent.addChild(createRequestTable(pageMaker, ctx, completedUpload, new QueueColumn[] { QueueColumn.FILENAME, QueueColumn.SIZE, QueueColumn.KEY }, priorityClasses, advancedModeEnabled, true, "completed-upload-file", false, true));
      }
    }

    if (!completedDirUpload.isEmpty()) {
      contentNode.addChild("a", "id", "completedDirUpload");
      HTMLNode completedUploadDirContent = pageMaker.getInfobox("completed_requests", l10n("completedUDirectory", new String[]{ "size" }, new String[]{ String.valueOf(completedDirUpload.size()) }), contentNode, "download-completed", false);
      if (advancedModeEnabled) {
        completedUploadDirContent.addChild(createRequestTable(pageMaker, ctx, completedDirUpload, new QueueColumn[] { QueueColumn.IDENTIFIER, QueueColumn.FILES, QueueColumn.TOTAL_SIZE, QueueColumn.PERSISTENCE, QueueColumn.KEY }, priorityClasses, advancedModeEnabled, true, "completed-upload-dir", false, true));
      } else {
        completedUploadDirContent.addChild(createRequestTable(pageMaker, ctx, completedDirUpload, new QueueColumn[] { QueueColumn.FILES, QueueColumn.TOTAL_SIZE, QueueColumn.KEY }, priorityClasses, advancedModeEnabled, true, "completed-upload-dir", false, true));
      }
    }

    if (!failedDownload.isEmpty()) {
      contentNode.addChild("a", "id", "failedDownload");
      HTMLNode failedContent = pageMaker.getInfobox("failed_requests", l10n("failedD", new String[]{ "size" }, new String[]{ String.valueOf(failedDownload.size()) }), contentNode, "download-failed", false);
      if (advancedModeEnabled) {
        failedContent.addChild(createRequestTable(pageMaker, ctx, failedDownload, advancedModeFailure, priorityClasses, advancedModeEnabled, false, "failed-download", false, true, false, false, null));
      } else {
        failedContent.addChild(createRequestTable(pageMaker, ctx, failedDownload, simpleModeFailure, priorityClasses, advancedModeEnabled, false, "failed-download", false, true, false, false, null));
      }
    }

    if (!failedUpload.isEmpty()) {
      contentNode.addChild("a", "id", "failedUpload");
      HTMLNode failedContent = pageMaker.getInfobox("failed_requests", l10n("failedU", new String[]{ "size" }, new String[]{ String.valueOf(failedUpload.size()) }), contentNode, "upload-failed", false);
      if (advancedModeEnabled) {
        failedContent.addChild(createRequestTable(pageMaker, ctx, failedUpload, advancedModeFailure, priorityClasses, advancedModeEnabled, true, "failed-upload-file", false, true, false, false, null));
      } else {
        failedContent.addChild(createRequestTable(pageMaker, ctx, failedUpload, simpleModeFailure, priorityClasses, advancedModeEnabled, true, "failed-upload-file", false, true, false, false, null));
      }
    }

    if (!failedDirUpload.isEmpty()) {
      contentNode.addChild("a", "id", "failedDirUpload");
      HTMLNode failedContent = pageMaker.getInfobox("failed_requests", l10n("failedU", new String[]{ "size" }, new String[]{ String.valueOf(failedDirUpload.size()) }), contentNode, "upload-failed", false);
      if (advancedModeEnabled) {
        failedContent.addChild(createRequestTable(pageMaker, ctx, failedDirUpload, new QueueColumn[] { QueueColumn.IDENTIFIER, QueueColumn.FILES, QueueColumn.TOTAL_SIZE, QueueColumn.PROGRESS, QueueColumn.REASON, QueueColumn.PERSISTENCE, QueueColumn.KEY }, priorityClasses, advancedModeEnabled, true, "failed-upload-dir", false, true, false, false, null));
      } else {
        failedContent.addChild(createRequestTable(pageMaker, ctx, failedDirUpload, new QueueColumn[] { QueueColumn.FILES, QueueColumn.TOTAL_SIZE, QueueColumn.PROGRESS, QueueColumn.REASON, QueueColumn.KEY }, priorityClasses, advancedModeEnabled, true, "failed-upload-dir", false, true, false, false, null));
      }
    }

    if(!failedBadMIMEType.isEmpty()) {
      String[] types = failedBadMIMEType.keySet().toArray(new String[failedBadMIMEType.size()]);
      Arrays.sort(types);
      for(String type : types) {
        LinkedList<DownloadRequestStatus> getters = failedBadMIMEType.get(type);
        String atype = type.replace("-", "--").replace('/', '-');
        contentNode.addChild("a", "id", "failedDownload-badtype-"+atype);
        FilterMIMEType typeHandler = ContentFilter.getMIMEType(type);
        HTMLNode failedContent = pageMaker.getInfobox("failed_requests", l10n("failedDBadMIME", new String[]{ "size", "type" }, new String[]{ String.valueOf(getters.size()), type }), contentNode, "download-failed-"+atype, false);
        // FIXME add a class for easier styling.
        KnownUnsafeContentTypeException e = new KnownUnsafeContentTypeException(typeHandler);
        failedContent.addChild("p", l10n("badMIMETypeIntro", "type", type));
        List<String> detail = e.details();
View Full Code Here

      // Doesn't work.
      return false;
    }
    String fullMimeType = mimeType;
    mimeType = ContentFilter.stripMIMEType(mimeType);
    FilterMIMEType type = ContentFilter.getMIMEType(mimeType);
    if(type == null || ((!type.safeToRead) && type.readFilter == null)) {
      UnknownContentTypeException e = new UnknownContentTypeException(mimeType);
      data.free();
      onFailure(new FetchException(e.getFetchErrorCode(), data.size(), e, mimeType), null);
      return true;
View Full Code Here

       
    });
  }

  private void checkCompatibleExtension(String mimeType) throws FetchException {
    FilterMIMEType type = ContentFilter.getMIMEType(mimeType);
    if(type == null)
      // Not our problem, will be picked up elsewhere.
      return;
    if(!DefaultMIMETypes.isValidExt(mimeType, forceCompatibleExtension))
      throw new FetchException(FetchExceptionMode.MIME_INCOMPATIBLE_WITH_EXTENSION);
View Full Code Here

TOP

Related Classes of freenet.client.filter.FilterMIMEType

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.