NS_IMETHODIMP nsIOService::AllowPort(int32_t inPort, const char *scheme, bool *_retval) { int16_t port = inPort; if (port == -1) { *_retval = true; return NS_OK; } // first check to see if the port is in our blacklist: int32_t badPortListCnt = mRestrictedPortList.Length(); for (int i=0; i<badPortListCnt; i++) { if (port == mRestrictedPortList[i]) { *_retval = false; // check to see if the protocol wants to override if (!scheme) return NS_OK; nsCOMPtr<nsIProtocolHandler> handler; nsresult rv = GetProtocolHandler(scheme, getter_AddRefs(handler)); if (NS_FAILED(rv)) return rv; // let the protocol handler decide return handler->AllowPort(port, scheme, _retval); } } *_retval = true; return NS_OK; }
nsresult nsIOService::NewURI(const nsACString &aSpec, const char *aCharset, nsIURI *aBaseURI, nsIURI **result) { NS_ASSERTION(NS_IsMainThread(), "wrong thread"); static uint32_t recursionCount = 0; if (recursionCount >= MAX_RECURSION_COUNT) return NS_ERROR_MALFORMED_URI; AutoIncrement inc(&recursionCount); nsAutoCString scheme; nsresult rv = ExtractScheme(aSpec, scheme); if (NS_FAILED(rv)) { // then aSpec is relative if (!aBaseURI) return NS_ERROR_MALFORMED_URI; rv = aBaseURI->GetScheme(scheme); if (NS_FAILED(rv)) return rv; } // now get the handler for this scheme nsCOMPtr<nsIProtocolHandler> handler; rv = GetProtocolHandler(scheme.get(), getter_AddRefs(handler)); if (NS_FAILED(rv)) return rv; return handler->NewURI(aSpec, aCharset, aBaseURI, result); }
// nsISpeculativeConnect NS_IMETHODIMP nsIOService::SpeculativeConnect(nsIURI *aURI, nsIInterfaceRequestor *aCallbacks, nsIEventTarget *aTarget) { nsAutoCString scheme; nsresult rv = aURI->GetScheme(scheme); if (NS_FAILED(rv)) return rv; // Check for proxy information. If there is a proxy configured then a // speculative connect should not be performed because the potential // reward is slim with tcp peers closely located to the browser. nsCOMPtr<nsIProxyInfo> pi; LookupProxyInfo(aURI, nullptr, 0, &scheme, getter_AddRefs(pi)); if (pi) return NS_OK; nsCOMPtr<nsIProtocolHandler> handler; rv = GetProtocolHandler(scheme.get(), getter_AddRefs(handler)); if (NS_FAILED(rv)) return rv; nsCOMPtr<nsISpeculativeConnect> speculativeHandler = do_QueryInterface(handler); if (!speculativeHandler) return NS_OK; return speculativeHandler->SpeculativeConnect(aURI, aCallbacks, aTarget); }
NS_IMETHODIMP nsIOService::GetProtocolFlags(const char* scheme, uint32_t *flags) { nsCOMPtr<nsIProtocolHandler> handler; nsresult rv = GetProtocolHandler(scheme, getter_AddRefs(handler)); if (NS_FAILED(rv)) return rv; rv = handler->GetProtocolFlags(flags); return rv; }
BOOL KPurseModule::ProcessProtocol(LPCBYTE pbData, UINT uDataLen) { QCONFIRM_RET_FALSE(pbData != NULL && uDataLen > 0); KPlayer* pPlayer = g_cPlayerMgr.GetById(g_cOrpgWorld.m_dwClientPlayerId); QCONFIRM_RET_FALSE(NULL != pPlayer); KPlayerPurse* pPlayerPurse = pPlayer->GetCtrl<KPlayerPurse>(); QCONFIRM_RET_FALSE(NULL != pPlayerPurse); return GetProtocolHandler().ProtocolProcess(pPlayerPurse, pbData, uDataLen); }
BOOL KPurseModule::OnInit() { ScriptSafe cSafeScript = g_cScriptManager.GetSafeScript(); BOOL bRetCode = cSafeScript->CallTableFunction( "Purse", "GetPlayerMaxCarryCurrency", 1, ""); QCONFIRM_RET_FALSE(bRetCode); m_nPlayerMaxCarryCurrency = cSafeScript->GetInt(-1); g_cPursesetting.Init(); return GetProtocolHandler().OnInit(); }
NS_IMETHODIMP nsIOService::NewFileURI(nsIFile *file, nsIURI **result) { nsresult rv; NS_ENSURE_ARG_POINTER(file); nsCOMPtr<nsIProtocolHandler> handler; rv = GetProtocolHandler("file", getter_AddRefs(handler)); if (NS_FAILED(rv)) return rv; nsCOMPtr<nsIFileProtocolHandler> fileHandler( do_QueryInterface(handler, &rv) ); if (NS_FAILED(rv)) return rv; return fileHandler->NewFileURI(file, result); }
NS_IMETHODIMP nsIOService::NewChannelFromURIWithProxyFlags(nsIURI *aURI, nsIURI *aProxyURI, uint32_t aProxyFlags, nsIChannel **result) { nsresult rv; NS_ENSURE_ARG_POINTER(aURI); nsAutoCString scheme; rv = aURI->GetScheme(scheme); if (NS_FAILED(rv)) return rv; nsCOMPtr<nsIProtocolHandler> handler; rv = GetProtocolHandler(scheme.get(), getter_AddRefs(handler)); if (NS_FAILED(rv)) return rv; uint32_t protoFlags; rv = handler->GetProtocolFlags(&protoFlags); if (NS_FAILED(rv)) return rv; // Talk to the PPS if the protocol handler allows proxying. Otherwise, // skip this step. This allows us to lazily load the PPS at startup. if (protoFlags & nsIProtocolHandler::ALLOWS_PROXY) { nsCOMPtr<nsIProxyInfo> pi; LookupProxyInfo(aURI, aProxyURI, aProxyFlags, &scheme, getter_AddRefs(pi)); if (pi) { nsAutoCString type; if (NS_SUCCEEDED(pi->GetType(type)) && type.EqualsLiteral("http")) { // we are going to proxy this channel using an http proxy rv = GetProtocolHandler("http", getter_AddRefs(handler)); if (NS_FAILED(rv)) return rv; } nsCOMPtr<nsIProxiedProtocolHandler> pph = do_QueryInterface(handler); if (pph) return pph->NewProxiedChannel(aURI, pi, result); } } rv = handler->NewChannel(aURI, result); NS_ENSURE_SUCCESS(rv, rv); // Some extensions override the http protocol handler and provide their own // implementation. The channels returned from that implementation doesn't // seem to always implement the nsIUploadChannel2 interface, presumably // because it's a new interface. // Eventually we should remove this and simply require that http channels // implement the new interface. // See bug 529041 if (!gHasWarnedUploadChannel2 && scheme.EqualsLiteral("http")) { nsCOMPtr<nsIUploadChannel2> uploadChannel2 = do_QueryInterface(*result); if (!uploadChannel2) { nsCOMPtr<nsIConsoleService> consoleService = do_GetService(NS_CONSOLESERVICE_CONTRACTID); if (consoleService) { consoleService->LogStringMessage(NS_LITERAL_STRING( "Http channel implementation doesn't support nsIUploadChannel2. An extension has supplied a non-functional http protocol handler. This will break behavior and in future releases not work at all." ).get()); } gHasWarnedUploadChannel2 = true; } } return NS_OK; }