/** no override to keep plugin compatible to old stable */ @SuppressWarnings("deprecation") public void handleMultiHost(final DownloadLink link, final Account account) throws Exception { synchronized (hostUnavailableMap) { HashMap<String, Long> unavailableMap = hostUnavailableMap.get(account); if (unavailableMap != null) { Long lastUnavailable = unavailableMap.get(link.getHost()); if (lastUnavailable != null && System.currentTimeMillis() < lastUnavailable) { final long wait = lastUnavailable - System.currentTimeMillis(); throw new PluginException( LinkStatus.ERROR_TEMPORARILY_UNAVAILABLE, "Host is temporarily unavailable via " + this.getHost(), wait); } else if (lastUnavailable != null) { unavailableMap.remove(link.getHost()); if (unavailableMap.size() == 0) { hostUnavailableMap.remove(account); } } } } String user = Encoding.urlEncode(account.getUser()); String pw = Encoding.urlEncode(account.getPass()); String url = Encoding.urlEncode(link.getDownloadURL()); br.setFollowRedirects(true); br.setConnectTimeout(90 * 1000); br.setReadTimeout(90 * 1000); dl = null; showMessage(link, "Phase 1/2: Get download link"); String genlink = br.getPage( "http://www." + hostPublicDomain + "/api/get_ddl.php?login="******"&password="******"&url=" + url); String maxChunksString = br.getRequest().getResponseHeader("X-MaxChunks"); // Tested with share-online.biz: max 4 chunks possible int maxChunks = 1; if (link.getBooleanProperty(NOCHUNKS, false)) { maxChunks = 1; } else if (maxChunksString != null) { try { maxChunks = -(Integer.parseInt(maxChunksString)); } catch (final Throwable e) { logger.severe(e.getMessage()); } } if (!genlink.startsWith("http://")) { logger.severe(hostPublicDomain + "(Error): " + genlink); /* * after x retries we disable this host and retry with normal plugin */ if (link.getLinkStatus().getRetryCount() >= 3) { /* reset retry counter */ link.getLinkStatus().setRetryCount(0); /* disable hoster for one hour */ tempUnavailableHoster(account, link, 60 * 60 * 1000); } String msg = "(" + link.getLinkStatus().getRetryCount() + 1 + "/" + 3 + ")"; throw new PluginException( LinkStatus.ERROR_TEMPORARILY_UNAVAILABLE, "Retry in few secs" + msg, 10 * 1000l); } showMessage(link, "Phase 2/2: Start download..."); dl = jd.plugins.BrowserAdapter.openDownload(br, link, genlink, true, maxChunks); if (dl.getConnection().getResponseCode() == 404) { /* file offline */ dl.getConnection().disconnect(); throw new PluginException(LinkStatus.ERROR_FILE_NOT_FOUND); } final String serverfilename = getFileNameFromHeader(dl.getConnection()); if ("Too_many_open_connections.txt".equals(serverfilename)) { logger.info("received 'Too_many_open_connections.txt' as server filename..."); /* unknown error, we disable multiple chunks */ if (link.getBooleanProperty(StreamManiaCom.NOCHUNKS, false) == false) { link.setProperty(StreamManiaCom.NOCHUNKS, Boolean.valueOf(true)); throw new PluginException(LinkStatus.ERROR_RETRY); } else { throw new PluginException(LinkStatus.ERROR_TEMPORARILY_UNAVAILABLE, 5 * 60 * 1000l); } } if (!dl.getConnection().isContentDisposition()) { /* unknown error */ br.followConnection(); logger.severe(hostPublicDomain + "(Error): " + br.toString()); /* disable for 20 min */ tempUnavailableHoster(account, link, 20 * 60 * 1000); } if (dl.getConnection().getContentType().contains("html")) { logger.warning("final downloadlink leads to html code..."); br.followConnection(); logger.info(this.getHost() + ": unknowndlerror"); int timesFailed = link.getIntegerProperty("timesfailed" + FAIL_STRING + "_unknowndlerror", 1); link.getLinkStatus().setRetryCount(0); if (timesFailed <= 20) { timesFailed++; link.setProperty("timesfailed" + FAIL_STRING + "_unknowndlerror", timesFailed); throw new PluginException(LinkStatus.ERROR_RETRY, "Unknown download error"); } else { link.setProperty("timesfailed" + FAIL_STRING + "_unknowndlerror", Property.NULL); logger.info(this.getHost() + ": unknowndlerror --> Remporarily desabling current host"); tempUnavailableHoster(account, link, 60 * 60 * 1000); } } try { if (!this.dl.startDownload()) { try { if (dl.externalDownloadStop()) { return; } } catch (final Throwable e) { } /* unknown error, we disable multiple chunks */ if (link.getBooleanProperty(StreamManiaCom.NOCHUNKS, false) == false) { link.setProperty(StreamManiaCom.NOCHUNKS, Boolean.valueOf(true)); throw new PluginException(LinkStatus.ERROR_RETRY); } } } catch (final PluginException e) { // New V2 errorhandling /* unknown error, we disable multiple chunks */ if (e.getLinkStatus() != LinkStatus.ERROR_RETRY && link.getBooleanProperty(StreamManiaCom.NOCHUNKS, false) == false) { link.setProperty(StreamManiaCom.NOCHUNKS, Boolean.valueOf(true)); throw new PluginException(LinkStatus.ERROR_RETRY); } throw e; } }
@Override public void handleFree(final DownloadLink downloadLink) throws Exception, PluginException { requestFileInformation(downloadLink); String dllink = br.getRegex("\"(https?://[a-z0-9\\-_]+\\.sharesend\\.com/download\\?[^<>\"]*?)\"") .getMatch(0); if (dllink == null) { throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT); } dllink = Encoding.htmlDecode(dllink); /* Fix dllink */ final String ctype = new Regex(dllink, "content_type=([^<>\"]*?)&").getMatch(0); if (ctype != null) { dllink = dllink.replace(ctype, Encoding.urlEncode(ctype)); } /* Waittime is skippable */ // final String waittime = br.getRegex("<span>(\\d+)</span> seconds</p>").getMatch(0); // int wait = 5; // if (waittime != null) wait = Integer.parseInt(waittime); // sleep(wait * 1001l, downloadLink); int maxChunks = 0; if (downloadLink.getBooleanProperty(NOCHUNKS, false)) { maxChunks = 1; } dl = jd.plugins.BrowserAdapter.openDownload(br, downloadLink, dllink, true, maxChunks); if (dl.getConnection().getContentType().contains("html")) { br.followConnection(); /* Usually happens when we try with too many connections (refering to simultan downloads) */ if (br.containsHTML("\"error_code\": 2")) { throw new PluginException( LinkStatus.ERROR_TEMPORARILY_UNAVAILABLE, "Server error", 5 * 60 * 1000l); } throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT); } try { if (!this.dl.startDownload()) { try { if (dl.externalDownloadStop()) { return; } } catch (final Throwable e) { } /* unknown error, we disable multiple chunks */ if (downloadLink.getBooleanProperty(ShareSendCom.NOCHUNKS, false) == false) { downloadLink.setProperty(ShareSendCom.NOCHUNKS, Boolean.valueOf(true)); throw new PluginException(LinkStatus.ERROR_RETRY); } } } catch (final PluginException e) { // New V2 errorhandling /* unknown error, we disable multiple chunks */ if (e.getLinkStatus() != LinkStatus.ERROR_RETRY && downloadLink.getBooleanProperty(ShareSendCom.NOCHUNKS, false) == false) { downloadLink.setProperty(ShareSendCom.NOCHUNKS, Boolean.valueOf(true)); throw new PluginException(LinkStatus.ERROR_RETRY); } throw e; } }
@Override public void handleFree(final DownloadLink downloadLink) throws Exception, PluginException { requestFileInformation(downloadLink); String passCode = downloadLink.getStringProperty("pass", null); DLLINK = checkDirectLink(downloadLink, "panbaidudirectlink"); if (DLLINK == null) { final String original_url = downloadLink.getStringProperty("mainLink", null); final String shareid = downloadLink.getStringProperty("origurl_shareid", null); final String uk = downloadLink.getStringProperty("origurl_uk", null); final String link_password = downloadLink.getStringProperty("important_link_password", null); final String link_password_cookie = downloadLink.getStringProperty("important_link_password_cookie", null); if (link_password_cookie != null) { br.setCookie("http://pan.baidu.com/", "BDCLND", link_password_cookie); } br.getPage(original_url); /* Experimental code */ final String i_frame = br.getRegex( "<iframe src=\"(http://pan\\.baidu\\.com/share/link\\?shareid=\\d+\\&uk=\\d+\\&t=[A-Za-z0-9]+)\"") .getMatch(0); if (i_frame != null) { logger.info("Found i_frame - accessing it!"); br.getPage(i_frame); } else { logger.info("Found no i_frame"); } /* Fallback handling if the password cookie didn't work */ if (link_password != null && br.getURL().matches(TYPE_FOLDER_LINK_NORMAL_PASSWORD_PROTECTED)) { br.postPage( "http://pan.baidu.com/share/verify?" + "vcode=&shareid=" + shareid + "&uk=" + uk + "&t=" + System.currentTimeMillis(), "&pwd=" + Encoding.urlEncode(link_password)); if (!br.containsHTML("\"errno\":0")) { // Wrong password -> Impossible logger.warning( "pan.baidu.com: Couldn't download password protected link even though the password is given..."); throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT); } br.getPage(original_url); } final String sign = br.getRegex("FileUtils\\.share_sign=\"([a-z0-9]+)\"").getMatch(0); final String tsamp = br.getRegex("FileUtils\\.share_timestamp=\"(\\d+)\"").getMatch(0); if (sign == null || tsamp == null) { throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT); } final String fsid = downloadLink.getStringProperty("important_fsid", null); final String postLink = "http://pan.baidu.com/share/download?channel=chunlei&clienttype=0&web=1&uk=" + uk + "&shareid=" + shareid + "×tamp=" + tsamp + "&sign=" + sign + "&bdstoken=null&channel=chunlei&clienttype=0&web=1"; br.getHeaders().put("X-Requested-With", "XMLHttpRequest"); br.postPage(postLink, "fid_list=%5B" + fsid + "%5D"); String code = null; for (int i = 1; i <= 3; i++) { final String captchaLink = getJson("img"); if (captchaLink == null) { break; } final String captchaid = new Regex(captchaLink, "([A-Z0-9]+)$").getMatch(0); try { code = getCaptchaCode(captchaLink, downloadLink); } catch (final Throwable e) { logger.info("Captcha download failed -> Retrying!"); throw new PluginException(LinkStatus.ERROR_RETRY, "Captcha download failed"); } br.postPage( postLink, "fid_list=%5B" + fsid + "%5D&input=" + Encoding.urlEncode(code) + "&vcode=" + captchaid); } if (getJson("img") != null) { throw new PluginException(LinkStatus.ERROR_CAPTCHA); } if (br.containsHTML("\"errno\":\\-20")) { handlePluginBroken(downloadLink, "unknownerror20", 3); } else if (br.containsHTML("\"errno\":112")) { handlePluginBroken(downloadLink, "unknownerror112", 3); } DLLINK = getJson("dlink"); if (DLLINK == null) { throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT); } } int maxChunks = 0; if (downloadLink.getBooleanProperty(NOCHUNKS, false)) { maxChunks = 1; } dl = jd.plugins.BrowserAdapter.openDownload(br, downloadLink, DLLINK, true, maxChunks); if (dl.getConnection().getContentType().contains("html")) { br.followConnection(); throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT); } downloadLink.setFinalFileName(Encoding.htmlDecode(getFileNameFromHeader(dl.getConnection()))); if (passCode != null) { downloadLink.setProperty("pass", passCode); } downloadLink.setProperty("panbaidudirectlink", DLLINK); try { if (!this.dl.startDownload()) { try { if (dl.externalDownloadStop()) { return; } } catch (final Throwable e) { } /* unknown error, we disable multiple chunks */ if (downloadLink.getBooleanProperty(PanBaiduCom.NOCHUNKS, false) == false) { downloadLink.setProperty(PanBaiduCom.NOCHUNKS, Boolean.valueOf(true)); throw new PluginException(LinkStatus.ERROR_RETRY); } } } catch (final PluginException e) { // New V2 errorhandling /* unknown error, we disable multiple chunks */ if (e.getLinkStatus() != LinkStatus.ERROR_RETRY && downloadLink.getBooleanProperty(PanBaiduCom.NOCHUNKS, false) == false) { downloadLink.setProperty(PanBaiduCom.NOCHUNKS, Boolean.valueOf(true)); throw new PluginException(LinkStatus.ERROR_RETRY); } throw e; } }
/** no override to keep plugin compatible to old stable */ public void handleMultiHost(final DownloadLink link, final Account acc) throws Exception { login(acc, true); String dllink = checkDirectLink(link, "premiumaxnetdirectlink"); if (dllink == null) { br.getHeaders().put("Accept", "*/*"); br.getHeaders().put("X-Requested-With", "XMLHttpRequest"); br.postPage( "http://www.premiumax.net/direct_link.html?rand=0." + System.currentTimeMillis(), "captcha=&key=indexKEY&urllist=" + Encoding.urlEncode(link.getDownloadURL())); if (br.containsHTML("temporary problem")) { logger.info( "Current hoster is temporarily not available via premiumax.net -> Disabling it"); tempUnavailableHoster(acc, link, 60 * 60 * 1000l); } else if (br.containsHTML("You do not have the rights to download from")) { logger.info( "Current hoster is not available via this premiumax.net account -> Disabling it"); tempUnavailableHoster(acc, link, 60 * 60 * 1000l); } else if (br.containsHTML("We do not support your link")) { logger.info("Current hoster is not supported by premiumax.net -> Disabling it"); tempUnavailableHoster(acc, link, 3 * 60 * 60 * 1000l); } else if (br.containsHTML("You only can download")) { /* We're too fast - usually this should not happen */ throw new PluginException( LinkStatus.ERROR_RETRY, "Too many connections active, try again in some seconds..."); } else if (br.containsHTML("> Our server can\\'t connect to")) { logger.info(NICE_HOST + ": cantconnect"); int timesFailed = link.getIntegerProperty(NICE_HOSTproperty + "timesfailed_cantconnect", 0); link.getLinkStatus().setRetryCount(0); if (timesFailed <= 10) { timesFailed++; link.setProperty(NICE_HOSTproperty + "timesfailed_cantconnect", timesFailed); logger.info(NICE_HOST + ": cantconnect -> Retrying"); throw new PluginException(LinkStatus.ERROR_RETRY, "cantconnect"); } else { link.setProperty(NICE_HOSTproperty + "timesfailed_cantconnect", Property.NULL); logger.info(NICE_HOST + ": cantconnect - disabling current host!"); tempUnavailableHoster(acc, link, 30 * 60 * 1000l); } } dllink = br.getRegex("\"(http://(www\\.)?premiumax\\.net/dl/[a-z0-9]+/?)\"").getMatch(0); if (dllink == null) { logger.info(NICE_HOST + ": dllinknullerror"); int timesFailed = link.getIntegerProperty(NICE_HOSTproperty + "timesfailed_dllinknullerror", 0); link.getLinkStatus().setRetryCount(0); if (timesFailed <= 2) { timesFailed++; link.setProperty(NICE_HOSTproperty + "timesfailed_dllinknullerror", timesFailed); logger.info(NICE_HOST + ": dllinknullerror -> Retrying"); throw new PluginException(LinkStatus.ERROR_RETRY, "dllinknullerror"); } else { link.setProperty(NICE_HOSTproperty + "timesfailed_dllinknullerror", Property.NULL); logger.info(NICE_HOST + ": dllinknullerror - disabling current host!"); tempUnavailableHoster(acc, link, 60 * 60 * 1000l); } } } int maxChunks = 0; if (link.getBooleanProperty(PremiumaxNet.NOCHUNKS, false)) { maxChunks = 1; } dl = jd.plugins.BrowserAdapter.openDownload(br, link, dllink, true, maxChunks); if (dl.getConnection().getContentType().contains("html")) { br.followConnection(); logger.info("Unhandled download error on premiumax.net: " + br.toString()); throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT); } link.setProperty("premiumaxnetdirectlink", dllink); try { if (!this.dl.startDownload()) { try { if (dl.externalDownloadStop()) return; } catch (final Throwable e) { } /* unknown error, we disable multiple chunks */ if (link.getBooleanProperty(PremiumaxNet.NOCHUNKS, false) == false) { link.setProperty(PremiumaxNet.NOCHUNKS, Boolean.valueOf(true)); throw new PluginException(LinkStatus.ERROR_RETRY); } } } catch (final PluginException e) { // New V2 errorhandling /* unknown error, we disable multiple chunks */ if (e.getLinkStatus() != LinkStatus.ERROR_RETRY && link.getBooleanProperty(PremiumaxNet.NOCHUNKS, false) == false) { link.setProperty(PremiumaxNet.NOCHUNKS, Boolean.valueOf(true)); throw new PluginException(LinkStatus.ERROR_RETRY); } throw e; } }