Changeset 8147cdf


Ignore:
Timestamp:
Sep 5, 2005 7:27:08 PM (15 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
5a1f738
Parents:
6afc64a
git-author:
jrandom <jrandom> (09/05/05 19:27:08)
git-committer:
zzz <zzz@…> (09/05/05 19:27:08)
Message:

2005-09-05 jrandom

  • Expose the HTTP headers to EepGet? status listeners
  • Handle DSA key failures properly (if the signature is not invertable, it is obviously invalid)

also, syndie now properly detects whether the remote archive can send a filtered export.zip
by examining the HTTP headers for X-Syndie-Export-Capable: true. If the remote archive
does not set that header (and neither freesites, nor apache or anything other than the ArchiveServlet? will),
it uses individual HTTP requests for individual blog posts and metadata fetches.

Location:
apps
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • apps/routerconsole/java/src/net/i2p/router/web/NewsFetcher.java

    r6afc64a r8147cdf  
    225225        temp.delete();
    226226    }
     227    public void headerReceived(String url, int attemptNum, String key, String val) {}
    227228}
  • apps/routerconsole/java/src/net/i2p/router/web/UpdateHandler.java

    r6afc64a r8147cdf  
    44import java.text.DecimalFormat;
    55
     6import net.i2p.I2PAppContext;
    67import net.i2p.crypto.TrustedUpdate;
    78import net.i2p.router.Router;
     
    166167            System.setProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false");
    167168        }
     169        public void headerReceived(String url, int attemptNum, String key, String val) {}
    168170    }
    169171   
  • apps/syndie/java/src/net/i2p/syndie/web/ArchiveServlet.java

    r6afc64a r8147cdf  
    9090    }
    9191   
     92    public static final String HEADER_EXPORT_CAPABLE = "X-Syndie-Export-Capable";
     93   
    9294    private void renderSummary(HttpServletResponse resp) throws ServletException, IOException {
    9395        resp.setContentType("text/plain;charset=utf-8");
    9496        //resp.setCharacterEncoding("UTF-8");
     97        resp.setHeader(HEADER_EXPORT_CAPABLE, "true");
    9598        OutputStream out = resp.getOutputStream();
    9699        ArchiveIndex index = BlogManager.instance().getArchive().getIndex();
  • apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java

    r6afc64a r8147cdf  
    2525    private List _statusMessages;
    2626    private boolean _fetchIndexInProgress;
     27    private boolean _exportCapable;
    2728   
    2829    public RemoteArchiveBean() {
     
    3637        _proxyHost = null;
    3738        _proxyPort = -1;
     39        _exportCapable = false;
    3840        _statusMessages = new ArrayList();
    3941    }
     
    150152        }
    151153        if ( (entries == null) || (entries.length <= 0) ) return;
    152         StringBuffer url = new StringBuffer(512);
    153         url.append(buildExportURL());
    154         Set meta = new HashSet();
    155         for (int i = 0; i < entries.length; i++) {
    156             BlogURI uri = new BlogURI(entries[i]);
    157             if (uri.getEntryId() >= 0) {
    158                 url.append("entry=").append(uri.toString()).append('&');
    159                 meta.add(uri.getKeyHash());
    160                 _statusMessages.add("Scheduling blog post fetching for " + HTMLRenderer.sanitizeString(entries[i]));
    161             }
    162         }
    163         for (Iterator iter = meta.iterator(); iter.hasNext(); ) {
    164             Hash blog = (Hash)iter.next();
    165             url.append("meta=").append(blog.toBase64()).append('&');
    166             _statusMessages.add("Scheduling blog metadata fetching for " + blog.toBase64());
    167         }
    168         List urls = new ArrayList(1);
    169         urls.add(url.toString());
    170         List tmpFiles = new ArrayList(1);
    171         try {
    172             File tmp = File.createTempFile("fetchBulk", ".zip", BlogManager.instance().getTempDir());
    173             tmpFiles.add(tmp);
    174             fetch(urls, tmpFiles, user, new BulkFetchListener(tmp));
    175         } catch (IOException ioe) {
    176             _statusMessages.add("Internal error creating temporary file to fetch " + HTMLRenderer.sanitizeString(url.toString()) + ": " + ioe.getMessage());
     154        if (_exportCapable) {
     155            StringBuffer url = new StringBuffer(512);
     156            url.append(buildExportURL());
     157            Set meta = new HashSet();
     158            for (int i = 0; i < entries.length; i++) {
     159                BlogURI uri = new BlogURI(entries[i]);
     160                if (uri.getEntryId() >= 0) {
     161                    url.append("entry=").append(uri.toString()).append('&');
     162                    meta.add(uri.getKeyHash());
     163                    _statusMessages.add("Scheduling bulk blog post fetch of " + HTMLRenderer.sanitizeString(entries[i]));
     164                }
     165            }
     166            for (Iterator iter = meta.iterator(); iter.hasNext(); ) {
     167                Hash blog = (Hash)iter.next();
     168                url.append("meta=").append(blog.toBase64()).append('&');
     169                _statusMessages.add("Scheduling bulk blog metadata fetch of " + blog.toBase64());
     170            }
     171            List urls = new ArrayList(1);
     172            urls.add(url.toString());
     173            List tmpFiles = new ArrayList(1);
     174            try {
     175                File tmp = File.createTempFile("fetchBulk", ".zip", BlogManager.instance().getTempDir());
     176                tmpFiles.add(tmp);
     177                fetch(urls, tmpFiles, user, new BulkFetchListener(tmp));
     178            } catch (IOException ioe) {
     179                _statusMessages.add("Internal error creating temporary file to fetch " + HTMLRenderer.sanitizeString(url.toString()) + ": " + ioe.getMessage());
     180            }
     181        } else {
     182            List urls = new ArrayList(entries.length+8);
     183            for (int i = 0; i < entries.length; i++) {
     184                BlogURI uri = new BlogURI(entries[i]);
     185                if (uri.getEntryId() >= 0) {
     186                    String metaURL = buildMetaURL(uri.getKeyHash());
     187                    if (!urls.contains(metaURL)) {
     188                        urls.add(metaURL);
     189                        _statusMessages.add("Scheduling blog metadata fetch of " + HTMLRenderer.sanitizeString(entries[i]));
     190                    }
     191                    urls.add(buildEntryURL(uri));
     192                    _statusMessages.add("Scheduling blog post fetch of " + HTMLRenderer.sanitizeString(entries[i]));
     193                }
     194            }
     195            List tmpFiles = new ArrayList(1);
     196            try {
     197                for (int i = 0; i < urls.size(); i++) {
     198                    File t = File.createTempFile("fetchBulk", ".dat", BlogManager.instance().getTempDir());
     199                    tmpFiles.add(t);
     200                }
     201                fetch(urls, tmpFiles, user, new BlogStatusListener());
     202            } catch (IOException ioe) {
     203                _statusMessages.add("Internal error creating temporary file to fetch posts: " + HTMLRenderer.sanitizeString(urls.toString()));
     204            }
    177205        }
    178206    }
     
    234262        _proxyHost = null;
    235263        _proxyPort = -1;
     264        _exportCapable = false;
    236265       
    237266        if ( (schema == null) || (schema.trim().length() <= 0) ||
     
    296325            _fetchIndexInProgress = false;
    297326        }
     327        public void headerReceived(String url, int currentAttempt, String key, String val) {
     328            if (ArchiveServlet.HEADER_EXPORT_CAPABLE.equals(key) && ("true".equals(val))) {
     329                _statusMessages.add("Remote archive is bulk export capable");
     330                _exportCapable = true;
     331            } else {
     332                System.err.println("Header received: [" + key + "] = [" + val + "]");
     333            }
     334        }
    298335    }
    299336   
     
    306343        public void bytesTransferred(long alreadyTransferred, int currentWrite, long bytesTransferred, long bytesRemaining, String url) {}
    307344        public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile) {
    308             _statusMessages.add("Fetch of " + HTMLRenderer.sanitizeString(url) + " successful");
    309             File info = new File(outputFile);
    310             FileInputStream in = null;
    311             try {
    312                 BlogInfo i = new BlogInfo();
    313                 in = new FileInputStream(info);
    314                 i.load(in);
    315                 boolean ok = BlogManager.instance().getArchive().storeBlogInfo(i);
    316                 if (ok) {
    317                     _statusMessages.add("Blog info for " + HTMLRenderer.sanitizeString(i.getProperty(BlogInfo.NAME)) + " imported");
    318                     BlogManager.instance().getArchive().reloadInfo();
    319                 } else {
    320                     _statusMessages.add("Blog info at " + HTMLRenderer.sanitizeString(url) + " was corrupt / invalid / forged");
    321                 }
    322             } catch (IOException ioe) {
    323                 ioe.printStackTrace();
    324             } finally {
    325                 if (in != null) try { in.close(); } catch (IOException ioe) {}
    326                 info.delete();
    327             }
     345            handleMetadata(url, outputFile);
    328346        }
    329347        public void transferFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt) {
    330348            _statusMessages.add("Fetch of " + HTMLRenderer.sanitizeString(url) + " failed after " + bytesTransferred);;
     349        }
     350        public void headerReceived(String url, int currentAttempt, String key, String val) {}
     351    }
     352   
     353    private void handleMetadata(String url, String outputFile) {
     354        _statusMessages.add("Fetch of " + HTMLRenderer.sanitizeString(url) + " successful");
     355        File info = new File(outputFile);
     356        FileInputStream in = null;
     357        try {
     358            BlogInfo i = new BlogInfo();
     359            in = new FileInputStream(info);
     360            i.load(in);
     361            boolean ok = BlogManager.instance().getArchive().storeBlogInfo(i);
     362            if (ok) {
     363                _statusMessages.add("Blog info for " + HTMLRenderer.sanitizeString(i.getProperty(BlogInfo.NAME)) + " imported");
     364                BlogManager.instance().getArchive().reloadInfo();
     365            } else {
     366                _statusMessages.add("Blog info at " + HTMLRenderer.sanitizeString(url) + " was corrupt / invalid / forged");
     367            }
     368        } catch (IOException ioe) {
     369            ioe.printStackTrace();
     370        } finally {
     371            if (in != null) try { in.close(); } catch (IOException ioe) {}
     372            info.delete();
    331373        }
    332374    }
     
    340382        public void bytesTransferred(long alreadyTransferred, int currentWrite, long bytesTransferred, long bytesRemaining, String url) {}
    341383        public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile) {
     384            if (url.endsWith(".snm")) {
     385                handleMetadata(url, outputFile);
     386                return;
     387            }
    342388            _statusMessages.add("Fetch of " + HTMLRenderer.sanitizeString(url) + " successful");
    343389            File file = new File(outputFile);
     
    376422            _statusMessages.add("Fetch of " + HTMLRenderer.sanitizeString(url) + " failed after " + bytesTransferred);
    377423        }
     424        public void headerReceived(String url, int currentAttempt, String key, String val) {}
    378425    }
    379426   
     
    456503            _tmp.delete();
    457504        }
     505        public void headerReceived(String url, int currentAttempt, String key, String val) {}
    458506    }
    459507   
Note: See TracChangeset for help on using the changeset viewer.