本文整理汇总了C++中PR_LOG函数的典型用法代码示例。如果您正苦于以下问题:C++ PR_LOG函数的具体用法?C++ PR_LOG怎么用?C++ PR_LOG使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了PR_LOG函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PR_LOG
XRemoteClient::~XRemoteClient()
{
PR_LOG(sRemoteLm, PR_LOG_DEBUG, ("XRemoteClient::~XRemoteClient"));
if (mInitialized)
Shutdown();
}
示例2: NS_ENSURE_ARG_POINTER
NS_IMETHODIMP
nsMsgCopyService::CopyMessages(nsIMsgFolder* srcFolder, /* UI src folder */
nsIArray* messages,
nsIMsgFolder* dstFolder,
bool isMove,
nsIMsgCopyServiceListener* listener,
nsIMsgWindow* window,
bool allowUndo)
{
NS_ENSURE_ARG_POINTER(srcFolder);
NS_ENSURE_ARG_POINTER(messages);
NS_ENSURE_ARG_POINTER(dstFolder);
PR_LOG(gCopyServiceLog, PR_LOG_DEBUG, ("CopyMessages"));
if (srcFolder == dstFolder)
{
NS_ERROR("src and dest folders for msg copy can't be the same");
return NS_ERROR_FAILURE;
}
nsCopyRequest* copyRequest;
nsCopySource* copySource = nullptr;
nsCOMArray<nsIMsgDBHdr> msgArray;
uint32_t cnt;
nsCOMPtr<nsIMsgDBHdr> msg;
nsCOMPtr<nsIMsgFolder> curFolder;
nsCOMPtr<nsISupports> aSupport;
nsresult rv;
// XXX TODO
// JUNK MAIL RELATED
// make sure dest folder exists
// and has proper flags, before we start copying?
copyRequest = new nsCopyRequest();
if (!copyRequest)
return NS_ERROR_OUT_OF_MEMORY;
aSupport = do_QueryInterface(srcFolder, &rv);
rv = copyRequest->Init(nsCopyMessagesType, aSupport, dstFolder, isMove,
0 /* new msg flags, not used */, EmptyCString(),
listener, window, allowUndo);
if (NS_FAILED(rv))
goto done;
messages->GetLength(&cnt);
if (PR_LOG_TEST(gCopyServiceLog, PR_LOG_ALWAYS))
LogCopyRequest("CopyMessages request", copyRequest);
// duplicate the message array so we could sort the messages by it's
// folder easily
for (uint32_t i = 0; i < cnt; i++)
{
nsCOMPtr<nsIMsgDBHdr> currMsg = do_QueryElementAt(messages, i);
msgArray.AppendObject(currMsg);
}
cnt = msgArray.Count();
while (cnt-- > 0)
{
msg = msgArray[cnt];
rv = msg->GetFolder(getter_AddRefs(curFolder));
if (NS_FAILED(rv))
goto done;
if (!copySource)
{
copySource = copyRequest->AddNewCopySource(curFolder);
if (!copySource)
{
rv = NS_ERROR_OUT_OF_MEMORY;
goto done;
}
}
if (curFolder == copySource->m_msgFolder)
{
copySource->AddMessage(msg);
msgArray.RemoveObjectAt(cnt);
}
if (cnt == 0)
{
cnt = msgArray.Count();
if (cnt > 0)
copySource = nullptr; // * force to create a new one and
// * continue grouping the messages
}
}
// undo stuff
if (NS_SUCCEEDED(rv) && copyRequest->m_allowUndo && copyRequest->m_copySourceArray.Length() > 1 &&
copyRequest->m_txnMgr)
copyRequest->m_txnMgr->BeginBatch();
done:
//.........这里部分代码省略.........
示例3: defined
// wrapper for ldap_get_values()
//
NS_IMETHODIMP
nsLDAPMessage::GetValues(const char *aAttr, uint32_t *aCount,
PRUnichar ***aValues)
{
char **values;
#if defined(DEBUG)
// We only want this being logged for debug builds so as not to affect performance too much.
PR_LOG(gLDAPLogModule, PR_LOG_DEBUG,
("nsLDAPMessage::GetValues(): called with aAttr = '%s'", aAttr));
#endif
values = ldap_get_values(mConnectionHandle, mMsgHandle, aAttr);
// bail out if there was a problem
//
if (!values) {
int32_t lderrno = ldap_get_lderrno(mConnectionHandle, 0, 0);
if ( lderrno == LDAP_DECODING_ERROR ) {
// this may not be an error; it could just be that the
// caller has asked for an attribute that doesn't exist.
//
PR_LOG(gLDAPLogModule, PR_LOG_WARNING,
("nsLDAPMessage::GetValues(): ldap_get_values returned "
"LDAP_DECODING_ERROR"));
return NS_ERROR_LDAP_DECODING_ERROR;
} else if ( lderrno == LDAP_PARAM_ERROR ) {
NS_ERROR("nsLDAPMessage::GetValues(): internal error: 1");
return NS_ERROR_UNEXPECTED;
} else {
NS_ERROR("nsLDAPMessage::GetValues(): internal error: 2");
return NS_ERROR_UNEXPECTED;
}
}
// count the values
//
uint32_t numVals = ldap_count_values(values);
// create an array of the appropriate size
//
*aValues = static_cast<PRUnichar **>(nsMemory::Alloc(numVals * sizeof(PRUnichar *)));
if (!*aValues) {
ldap_value_free(values);
return NS_ERROR_OUT_OF_MEMORY;
}
// clone the array (except for the trailing NULL entry) using the
// shared allocator for XPCOM correctness
//
uint32_t i;
for ( i = 0 ; i < numVals ; i++ ) {
nsDependentCString sValue(values[i]);
if (IsUTF8(sValue))
(*aValues)[i] = ToNewUnicode(NS_ConvertUTF8toUTF16(sValue));
else
(*aValues)[i] = ToNewUnicode(NS_ConvertASCIItoUTF16(sValue));
if ( ! (*aValues)[i] ) {
NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY(i, aValues);
ldap_value_free(values);
return NS_ERROR_OUT_OF_MEMORY;
}
}
// now free our value array since we already cloned the values array
// to the 'aValues' results array.
ldap_value_free(values);
*aCount = numVals;
return NS_OK;
}
示例4: tracefunc
void tracefunc (void *aClosure, const char *aStmt)
{
PR_LOG(gStorageLog, PR_LOG_DEBUG, ("sqlite3_trace on %p for '%s'", aClosure,
aStmt));
}
示例5: PR_LOG
nsresult
nsCertTree::GetCertsByTypeFromCertList(CERTCertList *aCertList,
PRUint32 aWantedType,
nsCertCompareFunc aCertCmpFn,
void *aCertCmpFnArg)
{
PR_LOG(gPIPNSSLog, PR_LOG_DEBUG, ("GetCertsByTypeFromCertList"));
if (!aCertList)
return NS_ERROR_FAILURE;
if (!mOriginalOverrideService)
return NS_ERROR_FAILURE;
nsTHashtable<nsCStringHashKey> allHostPortOverrideKeys;
if (!allHostPortOverrideKeys.Init())
return NS_ERROR_OUT_OF_MEMORY;
if (aWantedType == nsIX509Cert::SERVER_CERT) {
mOriginalOverrideService->
EnumerateCertOverrides(nsnull,
CollectAllHostPortOverridesCallback,
&allHostPortOverrideKeys);
}
CERTCertListNode *node;
int count = 0;
for (node = CERT_LIST_HEAD(aCertList);
!CERT_LIST_END(node, aCertList);
node = CERT_LIST_NEXT(node)) {
bool wantThisCert = (aWantedType == nsIX509Cert2::ANY_CERT);
bool wantThisCertIfNoOverrides = false;
bool wantThisCertIfHaveOverrides = false;
bool addOverrides = false;
if (!wantThisCert) {
PRUint32 thisCertType = getCertType(node->cert);
// The output from getCertType is a "guess", which can be wrong.
// The guess is based on stored trust flags, but for the host:port
// overrides, we are storing certs without any trust flags associated.
// So we must check whether the cert really belongs to the
// server, email or unknown tab. We will lookup the cert in the override
// list to come to the decision. Unfortunately, the lookup in the
// override list is quite expensive. Therefore we are using this
// lengthy if/else statement to minimize
// the number of override-list-lookups.
if (aWantedType == nsIX509Cert::SERVER_CERT
&& thisCertType == nsIX509Cert::UNKNOWN_CERT) {
// This unknown cert was stored without trust
// Are there host:port based overrides stored?
// If yes, display them.
addOverrides = true;
}
else
if (aWantedType == nsIX509Cert::UNKNOWN_CERT
&& thisCertType == nsIX509Cert::UNKNOWN_CERT) {
// This unknown cert was stored without trust.
// If there are associated overrides, do not show as unknown.
// If there are no associated overrides, display as unknown.
wantThisCertIfNoOverrides = true;
}
else
if (aWantedType == nsIX509Cert::SERVER_CERT
&& thisCertType == nsIX509Cert::SERVER_CERT) {
// This server cert is explicitly marked as a web site peer,
// with or without trust, but editable, so show it
wantThisCert = true;
// Are there host:port based overrides stored?
// If yes, display them.
addOverrides = true;
}
else
if (aWantedType == nsIX509Cert::SERVER_CERT
&& thisCertType == nsIX509Cert::EMAIL_CERT) {
// This cert might have been categorized as an email cert
// because it carries an email address. But is it really one?
// Our cert categorization is uncertain when it comes to
// distinguish between email certs and web site certs.
// So, let's see if we have an override for that cert
// and if there is, conclude it's really a web site cert.
addOverrides = true;
}
else
if (aWantedType == nsIX509Cert::EMAIL_CERT
&& thisCertType == nsIX509Cert::EMAIL_CERT) {
// This cert might have been categorized as an email cert
// because it carries an email address. But is it really one?
// Our cert categorization is uncertain when it comes to
// distinguish between email certs and web site certs.
// So, let's see if we have an override for that cert
// and if there is, conclude it's really a web site cert.
wantThisCertIfNoOverrides = true;
}
else
if (thisCertType == aWantedType) {
wantThisCert = true;
}
}
//.........这里部分代码省略.........
示例6: NS_ASSERTION
txInstruction*
txStylesheet::findTemplate(const txXPathNode& aNode,
const txExpandedName& aMode,
txIMatchContext* aContext,
ImportFrame* aImportedBy,
ImportFrame** aImportFrame)
{
NS_ASSERTION(aImportFrame, "missing ImportFrame pointer");
*aImportFrame = nsnull;
txInstruction* matchTemplate = nsnull;
ImportFrame* endFrame = nsnull;
txListIterator frameIter(&mImportFrames);
if (aImportedBy) {
ImportFrame* curr = static_cast<ImportFrame*>(frameIter.next());
while (curr != aImportedBy) {
curr = static_cast<ImportFrame*>(frameIter.next());
}
endFrame = aImportedBy->mFirstNotImported;
}
#ifdef PR_LOGGING
txPattern* match = 0;
#endif
ImportFrame* frame;
while (!matchTemplate &&
(frame = static_cast<ImportFrame*>(frameIter.next())) &&
frame != endFrame) {
// get templatelist for this mode
nsTArray<MatchableTemplate>* templates =
frame->mMatchableTemplates.get(aMode);
if (templates) {
// Find template with highest priority
PRUint32 i, len = templates->Length();
for (i = 0; i < len && !matchTemplate; ++i) {
MatchableTemplate& templ = (*templates)[i];
if (templ.mMatch->matches(aNode, aContext)) {
matchTemplate = templ.mFirstInstruction;
*aImportFrame = frame;
#ifdef PR_LOGGING
match = templ.mMatch;
#endif
}
}
}
}
#ifdef PR_LOGGING
nsAutoString mode, nodeName;
if (aMode.mLocalName) {
aMode.mLocalName->ToString(mode);
}
txXPathNodeUtils::getNodeName(aNode, nodeName);
if (matchTemplate) {
nsAutoString matchAttr;
#ifdef TX_TO_STRING
match->toString(matchAttr);
#endif
PR_LOG(txLog::xslt, PR_LOG_DEBUG,
("MatchTemplate, Pattern %s, Mode %s, Node %s\n",
NS_LossyConvertUTF16toASCII(matchAttr).get(),
NS_LossyConvertUTF16toASCII(mode).get(),
NS_LossyConvertUTF16toASCII(nodeName).get()));
}
else {
PR_LOG(txLog::xslt, PR_LOG_DEBUG,
("No match, Node %s, Mode %s\n",
NS_LossyConvertUTF16toASCII(nodeName).get(),
NS_LossyConvertUTF16toASCII(mode).get()));
}
#endif
if (!matchTemplate) {
// Test for these first since a node can be both a text node
// and a root (if it is orphaned)
if (txXPathNodeUtils::isAttribute(aNode) ||
txXPathNodeUtils::isText(aNode)) {
matchTemplate = mCharactersTemplate;
}
else if (txXPathNodeUtils::isElement(aNode) ||
txXPathNodeUtils::isRoot(aNode)) {
matchTemplate = mContainerTemplate;
}
else {
matchTemplate = mEmptyTemplate;
}
}
return matchTemplate;
}
示例7: do_GetService
nsresult nsReadConfig::readConfigFile()
{
nsresult rv = NS_OK;
nsXPIDLCString lockFileName;
nsXPIDLCString lockVendor;
uint32_t fileNameLen = 0;
nsCOMPtr<nsIPrefBranch> defaultPrefBranch;
nsCOMPtr<nsIPrefService> prefService =
do_GetService(NS_PREFSERVICE_CONTRACTID, &rv);
if (NS_FAILED(rv))
return rv;
rv = prefService->GetDefaultBranch(nullptr, getter_AddRefs(defaultPrefBranch));
if (NS_FAILED(rv))
return rv;
// This preference is set in the all.js or all-ns.js (depending whether
// running mozilla or netscp6)
rv = defaultPrefBranch->GetCharPref("general.config.filename",
getter_Copies(lockFileName));
PR_LOG(MCD, PR_LOG_DEBUG, ("general.config.filename = %s\n", lockFileName.get()));
if (NS_FAILED(rv))
return rv;
// This needs to be read only once.
//
if (!mRead) {
// Initiate the new JS Context for Preference management
rv = CentralizedAdminPrefManagerInit();
if (NS_FAILED(rv))
return rv;
// Open and evaluate function calls to set/lock/unlock prefs
rv = openAndEvaluateJSFile("prefcalls.js", 0, false, false);
if (NS_FAILED(rv))
return rv;
// Evaluate platform specific directives
rv = openAndEvaluateJSFile("platform.js", 0, false, false);
if (NS_FAILED(rv))
return rv;
mRead = true;
}
// If the lockFileName is NULL return ok, because no lockFile will be used
// Once the config file is read, we should check that the vendor name
// is consistent By checking for the vendor name after reading the config
// file we allow for the preference to be set (and locked) by the creator
// of the cfg file meaning the file can not be renamed (successfully).
nsCOMPtr<nsIPrefBranch> prefBranch;
rv = prefService->GetBranch(nullptr, getter_AddRefs(prefBranch));
NS_ENSURE_SUCCESS(rv, rv);
int32_t obscureValue = 0;
(void) defaultPrefBranch->GetIntPref("general.config.obscure_value", &obscureValue);
PR_LOG(MCD, PR_LOG_DEBUG, ("evaluating .cfg file %s with obscureValue %d\n", lockFileName.get(), obscureValue));
rv = openAndEvaluateJSFile(lockFileName.get(), obscureValue, true, true);
if (NS_FAILED(rv))
{
PR_LOG(MCD, PR_LOG_DEBUG, ("error evaluating .cfg file %s %x\n", lockFileName.get(), rv));
return rv;
}
rv = prefBranch->GetCharPref("general.config.filename",
getter_Copies(lockFileName));
if (NS_FAILED(rv))
// There is NO REASON we should ever get here. This is POST reading
// of the config file.
return NS_ERROR_FAILURE;
rv = prefBranch->GetCharPref("general.config.vendor",
getter_Copies(lockVendor));
// If vendor is not NULL, do this check
if (NS_SUCCEEDED(rv)) {
fileNameLen = PL_strlen(lockFileName);
// lockVendor and lockFileName should be the same with the addtion of
// .cfg to the filename by checking this post reading of the cfg file
// this value can be set within the cfg file adding a level of security.
if (PL_strncmp(lockFileName, lockVendor, fileNameLen - 4) != 0)
return NS_ERROR_FAILURE;
}
// get the value of the autoconfig url
nsXPIDLCString urlName;
rv = prefBranch->GetCharPref("autoadmin.global_config_url",
getter_Copies(urlName));
if (NS_SUCCEEDED(rv) && !urlName.IsEmpty()) {
//.........这里部分代码省略.........
示例8: PR_LOG
void
nsPNGDecoder::error_callback(png_structp png_ptr, png_const_charp error_msg)
{
PR_LOG(GetPNGLog(), PR_LOG_ERROR, ("libpng error: %s\n", error_msg));
longjmp(png_jmpbuf(png_ptr), 1);
}
示例9: CheckLDAPOperationResult
// typedef PRBool
// (* nsHashtableEnumFunc)
// (nsHashKey *aKey, void *aData, void* aClosure);
PRBool
CheckLDAPOperationResult(nsHashKey *aKey, void *aData, void* aClosure)
{
int lderrno;
nsresult rv;
PRInt32 returnCode;
LDAPMessage *msgHandle;
nsCOMPtr<nsILDAPMessage> msg;
PRBool operationFinished = PR_TRUE;
struct timeval timeout = { 0, 0 };
PRIntervalTime sleepTime = PR_MillisecondsToInterval(40);
// we need to access some of the connection loop's objects
//
nsLDAPConnectionLoop *loop =
static_cast<nsLDAPConnectionLoop *>(aClosure);
// get the console service so we can log messages
//
nsCOMPtr<nsIConsoleService> consoleSvc =
do_GetService(kConsoleServiceContractId, &rv);
if (NS_FAILED(rv)) {
NS_ERROR("CheckLDAPOperationResult() couldn't get console service");
return NS_ERROR_FAILURE;
}
returnCode = ldap_result(loop->mRawConn->mConnectionHandle,
aKey->HashCode(), LDAP_MSG_ONE,
&timeout, &msgHandle);
// if we didn't error or timeout, create an nsILDAPMessage
//
switch (returnCode) {
case 0: // timeout
// the connection may not exist yet. sleep for a while
// to avoid a problem where the LDAP connection/thread isn't
// ready quite yet, and we want to avoid a very busy loop.
//
PR_Sleep(sleepTime);
return PR_TRUE;
case -1: // something went wrong
lderrno = ldap_get_lderrno(loop->mRawConn->mConnectionHandle, 0, 0);
// Sleep briefly, to avoid a very busy loop again.
//
PR_Sleep(sleepTime);
switch (lderrno) {
case LDAP_SERVER_DOWN:
// We might want to shutdown the thread here, but it has
// implications to the user of the nsLDAPConnection, so
// for now we just ignore it. It's up to the owner of
// the nsLDAPConnection to detect the error, and then
// create a new connection.
//
PR_LOG(gLDAPLogModule, PR_LOG_DEBUG,
("CheckLDAPOperationResult(): ldap_result returned"
" LDAP_SERVER_DOWN"));
break;
case LDAP_DECODING_ERROR:
consoleSvc->LogStringMessage(
NS_LITERAL_STRING("LDAP: WARNING: decoding error; possible corrupt data received").get());
NS_WARNING("CheckLDAPOperationResult(): ldaperrno = "
"LDAP_DECODING_ERROR after ldap_result()");
break;
case LDAP_NO_MEMORY:
NS_ERROR("CheckLDAPOperationResult(): Couldn't allocate memory"
" while getting async operation result");
// punt and hope things work out better next time around
break;
case LDAP_PARAM_ERROR:
// I think it's possible to hit a race condition where we're
// continuing to poll for a result after the C SDK connection
// has removed the operation because the connection has gone
// dead. In theory we should fix this. Practically, it's
// unclear to me whether it matters.
//
NS_WARNING("CheckLDAPOperationResult(): ldap_result returned"
" LDAP_PARAM_ERROR");
break;
default:
NS_ERROR("CheckLDAPOperationResult(): lderrno set to "
"unexpected value after ldap_result() "
"call in nsLDAPConnection::Run()");
PR_LOG(gLDAPLogModule, PR_LOG_ERROR,
("lderrno = 0x%x", lderrno));
break;
}
//.........这里部分代码省略.........
示例10: PR_LOG
// for nsIRunnable. this thread spins in ldap_result() awaiting the next
// message. once one arrives, it dispatches it to the nsILDAPMessageListener
// on the main thread.
//
// XXX do all returns from this function need to do thread cleanup?
//
NS_IMETHODIMP
nsLDAPConnectionLoop::Run(void)
{
PR_LOG(gLDAPLogModule, PR_LOG_DEBUG,
("nsLDAPConnection::Run() entered\n"));
// wait for results
//
while(1) {
// Exit this thread if we no longer have an nsLDAPConnection
// associated with it. We also aquire a lock here, to make sure
// to avoid a possible race condition when the nsLDAPConnection
// is destructed during the call to do_QueryReferent() (since that
// function isn't MT safe).
//
nsresult rv;
PR_Lock(mLock);
nsCOMPtr<nsILDAPConnection> strongConn =
do_QueryReferent(mWeakConn, &rv);
PR_Unlock(mLock);
if (NS_FAILED(rv)) {
mWeakConn = 0;
return NS_OK;
}
// we use a raw connection because we need to call non-interface
// methods
mRawConn = static_cast<nsLDAPConnection *>(static_cast<nsILDAPConnection *>(strongConn.get()));
// XXX deal with timeouts better
//
NS_ASSERTION(mRawConn->mConnectionHandle, "nsLDAPConnection::Run(): "
"no connection created.\n");
// We can't enumerate over mPendingOperations itself, because the
// callback needs to modify mPendingOperations. So we clone it first,
// and enumerate over the clone. It kinda sucks that we need to do
// this everytime we poll, but the hashtable will pretty much always
// be small.
//
// only clone if the number of pending operations is non-zero
// otherwise, put the LDAP connection thread to sleep (briefly)
// until there is pending operations..
if (mRawConn->mPendingOperations->Count()) {
nsHashtable *hashtableCopy = mRawConn->mPendingOperations->Clone();
if (hashtableCopy) {
hashtableCopy->Enumerate(CheckLDAPOperationResult, this);
delete hashtableCopy;
} else {
// punt and hope it works next time around
NS_ERROR("nsLDAPConnectionLoop::Run() error cloning hashtable");
}
}
else {
PR_Sleep(PR_MillisecondsToInterval(40));
}
}
// This will never happen, but here just in case.
//
return NS_OK;
}
示例11: defined
nsresult
nsLDAPConnection::InvokeMessageCallback(LDAPMessage *aMsgHandle,
nsILDAPMessage *aMsg,
PRBool aRemoveOpFromConnQ)
{
PRInt32 msgId;
nsresult rv;
nsCOMPtr<nsILDAPOperation> operation;
nsCOMPtr<nsILDAPMessageListener> listener;
#if defined(DEBUG)
// We only want this being logged for debug builds so as not to affect performance too much.
PR_LOG(gLDAPLogModule, PR_LOG_DEBUG, ("InvokeMessageCallback entered\n"));
#endif
// get the message id corresponding to this operation
//
msgId = ldap_msgid(aMsgHandle);
if (msgId == -1) {
NS_ERROR("nsLDAPConnection::GetCallbackByMessage(): "
"ldap_msgid() failed\n");
return NS_ERROR_FAILURE;
}
// get this in key form. note that using nsVoidKey in this way assumes
// that sizeof(void *) >= sizeof PRInt32
//
nsVoidKey *key = new nsVoidKey(reinterpret_cast<void *>(msgId));
if (!key)
return NS_ERROR_OUT_OF_MEMORY;
// find the operation in question
operation = getter_AddRefs(static_cast<nsILDAPOperation *>(mPendingOperations->Get(key)));
if (!operation) {
PR_LOG(gLDAPLogModule, PR_LOG_WARNING,
("Warning: InvokeMessageCallback(): couldn't find "
"nsILDAPOperation corresponding to this message id\n"));
delete key;
// this may well be ok, since it could just mean that the operation
// was aborted while some number of messages were already in transit.
//
return NS_OK;
}
// Make sure the mOperation member is set to this operation before
// we call the callback.
//
static_cast<nsLDAPMessage *>(aMsg)->mOperation = operation;
// get the message listener object (this may be a proxy for a
// callback which should happen on another thread)
//
rv = operation->GetMessageListener(getter_AddRefs(listener));
if (NS_FAILED(rv)) {
NS_ERROR("nsLDAPConnection::InvokeMessageCallback(): probable "
"memory corruption: GetMessageListener() returned error");
delete key;
return NS_ERROR_UNEXPECTED;
}
// invoke the callback
//
if (listener) {
listener->OnLDAPMessage(aMsg);
}
// if requested (ie the operation is done), remove the operation
// from the connection queue.
//
if (aRemoveOpFromConnQ) {
nsCOMPtr <nsLDAPOperation> operation =
getter_AddRefs(static_cast<nsLDAPOperation *>
(mPendingOperations->Get(key)));
// try to break cycles
if (operation)
operation->Clear();
rv = mPendingOperations->Remove(key);
if (NS_FAILED(rv)) {
NS_ERROR("nsLDAPConnection::InvokeMessageCallback: unable to "
"remove operation from the connection queue\n");
delete key;
return NS_ERROR_UNEXPECTED;
}
PR_LOG(gLDAPLogModule, PR_LOG_DEBUG,
("pending operation removed; total pending operations now ="
" %d\n", mPendingOperations->Count()));
}
delete key;
return NS_OK;
}
示例12: AuthCertificateHook
// Extracts whatever information we need out of fd (using SSL_*) and passes it
// to SSLServerCertVerificationJob::Dispatch. SSLServerCertVerificationJob should
// never do anything with fd except logging.
SECStatus
AuthCertificateHook(void *arg, PRFileDesc *fd, PRBool checkSig, PRBool isServer)
{
// Runs on the socket transport thread
PR_LOG(gPIPNSSLog, PR_LOG_DEBUG,
("[%p] starting AuthCertificateHook\n", fd));
// Modern libssl always passes PR_TRUE for checkSig, and we have no means of
// doing verification without checking signatures.
NS_ASSERTION(checkSig, "AuthCertificateHook: checkSig unexpectedly false");
// PSM never causes libssl to call this function with PR_TRUE for isServer,
// and many things in PSM assume that we are a client.
NS_ASSERTION(!isServer, "AuthCertificateHook: isServer unexpectedly true");
nsNSSSocketInfo *socketInfo = static_cast<nsNSSSocketInfo*>(arg);
if (socketInfo) {
// This is the first callback during full handshakes.
socketInfo->SetFirstServerHelloReceived();
}
ScopedCERTCertificate serverCert(SSL_PeerCertificate(fd));
if (!checkSig || isServer || !socketInfo || !serverCert) {
PR_SetError(PR_INVALID_STATE_ERROR, 0);
return SECFailure;
}
if (BlockServerCertChangeForSpdy(socketInfo, serverCert) != SECSuccess)
return SECFailure;
bool onSTSThread;
nsresult nrv;
nsCOMPtr<nsIEventTarget> sts
= do_GetService(NS_SOCKETTRANSPORTSERVICE_CONTRACTID, &nrv);
if (NS_SUCCEEDED(nrv)) {
nrv = sts->IsOnCurrentThread(&onSTSThread);
}
if (NS_FAILED(nrv)) {
NS_ERROR("Could not get STS service or IsOnCurrentThread failed");
PR_SetError(PR_UNKNOWN_ERROR, 0);
return SECFailure;
}
uint32_t providerFlags = 0;
socketInfo->GetProviderFlags(&providerFlags);
if (onSTSThread) {
// We *must* do certificate verification on a background thread because
// we need the socket transport thread to be free for our OCSP requests,
// and we *want* to do certificate verification on a background thread
// because of the performance benefits of doing so.
socketInfo->SetCertVerificationWaiting();
SECStatus rv = SSLServerCertVerificationJob::Dispatch(
static_cast<const void *>(fd), socketInfo, serverCert,
providerFlags);
return rv;
}
// We can't do certificate verification on a background thread, because the
// thread doing the network I/O may not interrupt its network I/O on receipt
// of our SSLServerCertVerificationResult event, and/or it might not even be
// a non-blocking socket.
SECStatus rv = AuthCertificate(socketInfo, serverCert, providerFlags);
if (rv == SECSuccess) {
return SECSuccess;
}
PRErrorCode error = PR_GetError();
if (error != 0) {
RefPtr<CertErrorRunnable> runnable(CreateCertErrorRunnable(
error, socketInfo, serverCert,
static_cast<const void *>(fd), providerFlags));
if (!runnable) {
// CreateCertErrorRunnable sets a new error code when it fails
error = PR_GetError();
} else {
// We have to return SECSuccess or SECFailure based on the result of the
// override processing, so we must block this thread waiting for it. The
// CertErrorRunnable will NOT dispatch the result at all, since we passed
// false for CreateCertErrorRunnable's async parameter
nrv = runnable->DispatchToMainThreadAndWait();
if (NS_FAILED(nrv)) {
NS_ERROR("Failed to dispatch CertErrorRunnable");
PR_SetError(PR_INVALID_STATE_ERROR, 0);
return SECFailure;
}
if (!runnable->mResult) {
NS_ERROR("CertErrorRunnable did not set result");
PR_SetError(PR_INVALID_STATE_ERROR, 0);
return SECFailure;
}
//.........这里部分代码省略.........
示例13: while
bool
XRemoteClient::WaitForResponse(Window aWindow, char **aResponse,
bool *aDestroyed, Atom aCommandAtom)
{
bool done = false;
bool accepted = false;
while (!done) {
XEvent event;
XNextEvent (mDisplay, &event);
if (event.xany.type == DestroyNotify &&
event.xdestroywindow.window == aWindow) {
/* Print to warn user...*/
PR_LOG(sRemoteLm, PR_LOG_DEBUG,
("window 0x%x was destroyed.\n",
(unsigned int) aWindow));
*aResponse = strdup("Window was destroyed while reading response.");
*aDestroyed = true;
return false;
}
else if (event.xany.type == PropertyNotify &&
event.xproperty.state == PropertyNewValue &&
event.xproperty.window == aWindow &&
event.xproperty.atom == mMozResponseAtom) {
Atom actual_type;
int actual_format;
unsigned long nitems, bytes_after;
unsigned char *data = 0;
Bool result;
result = XGetWindowProperty (mDisplay, aWindow, mMozResponseAtom,
0, (65536 / sizeof (long)),
True, /* atomic delete after */
XA_STRING,
&actual_type, &actual_format,
&nitems, &bytes_after,
&data);
if (result != Success) {
PR_LOG(sRemoteLm, PR_LOG_DEBUG,
("failed reading " MOZILLA_RESPONSE_PROP
" from window 0x%0x.\n",
(unsigned int) aWindow));
*aResponse = strdup("Internal error reading response from window.");
done = true;
}
else if (!data || strlen((char *) data) < 5) {
PR_LOG(sRemoteLm, PR_LOG_DEBUG,
("invalid data on " MOZILLA_RESPONSE_PROP
" property of window 0x%0x.\n",
(unsigned int) aWindow));
*aResponse = strdup("Server returned invalid data in response.");
done = true;
}
else if (*data == '1') { /* positive preliminary reply */
PR_LOG(sRemoteLm, PR_LOG_DEBUG, ("%s\n", data + 4));
/* keep going */
done = false;
}
else if (!strncmp ((char *)data, "200", 3)) { /* positive completion */
*aResponse = strdup((char *)data);
accepted = true;
done = true;
}
else if (*data == '2') { /* positive completion */
PR_LOG(sRemoteLm, PR_LOG_DEBUG, ("%s\n", data + 4));
*aResponse = strdup((char *)data);
accepted = true;
done = true;
}
else if (*data == '3') { /* positive intermediate reply */
PR_LOG(sRemoteLm, PR_LOG_DEBUG,
("internal error: "
"server wants more information? (%s)\n",
data));
*aResponse = strdup((char *)data);
done = true;
}
else if (*data == '4' || /* transient negative completion */
*data == '5') { /* permanent negative completion */
PR_LOG(sRemoteLm, PR_LOG_DEBUG, ("%s\n", data + 4));
*aResponse = strdup((char *)data);
done = true;
}
else {
PR_LOG(sRemoteLm, PR_LOG_DEBUG,
("unrecognised " MOZILLA_RESPONSE_PROP
" from window 0x%x: %s\n",
(unsigned int) aWindow, data));
*aResponse = strdup((char *)data);
done = true;
}
if (data)
XFree(data);
}
//.........这里部分代码省略.........
示例14: do_CreateInstance
nsresult nsMsgPurgeService::SearchFolderToPurge(nsIMsgFolder *folder, PRInt32 purgeInterval)
{
nsresult rv;
mSearchSession = do_CreateInstance(NS_MSGSEARCHSESSION_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
mSearchSession->RegisterListener(this,
nsIMsgSearchSession::allNotifications);
// update the time we attempted to purge this folder
char dateBuf[100];
dateBuf[0] = '\0';
PRExplodedTime exploded;
PR_ExplodeTime(PR_Now(), PR_LocalTimeParameters, &exploded);
PR_FormatTimeUSEnglish(dateBuf, sizeof(dateBuf), "%a %b %d %H:%M:%S %Y", &exploded);
folder->SetStringProperty("curJunkFolderLastPurgeTime", nsDependentCString(dateBuf));
PR_LOG(MsgPurgeLogModule, PR_LOG_ALWAYS, ("curJunkFolderLastPurgeTime is now %s", dateBuf));
nsCOMPtr<nsIMsgIncomingServer> server;
rv = folder->GetServer(getter_AddRefs(server)); //we need to get the folder's server scope because imap can have local junk folder
NS_ENSURE_SUCCESS(rv, rv);
nsMsgSearchScopeValue searchScope;
server->GetSearchScope(&searchScope);
mSearchSession->AddScopeTerm(searchScope, folder);
// look for messages older than the cutoff
// you can't also search by junk status, see
// nsMsgPurgeService::OnSearchHit()
nsCOMPtr <nsIMsgSearchTerm> searchTerm;
mSearchSession->CreateTerm(getter_AddRefs(searchTerm));
if (searchTerm)
{
searchTerm->SetAttrib(nsMsgSearchAttrib::AgeInDays);
searchTerm->SetOp(nsMsgSearchOp::IsGreaterThan);
nsCOMPtr<nsIMsgSearchValue> searchValue;
searchTerm->GetValue(getter_AddRefs(searchValue));
if (searchValue)
{
searchValue->SetAttrib(nsMsgSearchAttrib::AgeInDays);
searchValue->SetAge((PRUint32) purgeInterval);
searchTerm->SetValue(searchValue);
}
searchTerm->SetBooleanAnd(PR_FALSE);
mSearchSession->AppendTerm(searchTerm);
}
// we are about to search
// create mHdrsToDelete array (if not previously created)
if (!mHdrsToDelete)
{
mHdrsToDelete = do_CreateInstance(NS_ARRAY_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
}
else
{
PRUint32 count;
mHdrsToDelete->GetLength(&count);
NS_ASSERTION(count == 0, "mHdrsToDelete is not empty");
if (count > 0)
mHdrsToDelete->Clear(); // this shouldn't happen
}
mSearchFolder = folder;
return mSearchSession->Search(nsnull);
}
示例15: PR_LOG
NS_IMETHODIMP nsMsgPurgeService::OnNewSearch()
{
PR_LOG(MsgPurgeLogModule, PR_LOG_ALWAYS, ("on new search"));
return NS_OK;
}