⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pssecret.cxx

📁 SIP(Session Initiation Protocol)是由IETF定义
💻 CXX
字号:
/* ==================================================================== * The Vovida Software License, Version 1.0  *  * Copyright (c) 2000 Vovida Networks, Inc.  All rights reserved. *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: *  * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. *  * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. *  * 3. The names "VOCAL", "Vovida Open Communication Application Library", *    and "Vovida Open Communication Application Library (VOCAL)" must *    not be used to endorse or promote products derived from this *    software without prior written permission. For written *    permission, please contact vocal@vovida.org. * * 4. Products derived from this software may not be called "VOCAL", nor *    may "VOCAL" appear in their name, without prior written *    permission of Vovida Networks, Inc. *  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL VOVIDA * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. *  * ==================================================================== *  * This software consists of voluntary contributions made by Vovida * Networks, Inc. and many individuals on behalf of Vovida Networks, * Inc.  For more information on Vovida Networks, Inc., please see * <http://www.vovida.org/>. * */static const char* const PSSecret_cxx_Version =    "$Id: PSSecret.cxx,v 1.2.2.1 2003/03/13 17:46:12 bko Exp $";#include "PSSecret.hxx"#include <fstream>#include "cpLog.h"#include "vocalconfig.h"#include "Lock.hxx"#include "VIoException.hxx"#include "FileStat.hxx"using Vocal::IO::FileStat;PSSecret* PSSecret::instance_ = 0;PSSecret::PSSecret()    :myReadLastModified(0),     myWriteLastModified(0){}void PSSecret::create(const char* readFile, const char* writeFile){    if(!instance_)    {        instance_ = new PSSecret;    }    instance_->myReadFile = readFile;    instance_->myWriteFile = writeFile;    instance_->update(true);    assert(instance_);}Data PSSecret::readEntry(const char* filename, const char* user) throw (VException& ){    Data tmp;    // need to read the data    std::ifstream openFile(filename);        if(!openFile)    {        // do something        throw VIoException("failed to read file", __FILE__, __LINE__, 0);    }            char buf[256];    while(openFile && !openFile.eof())    {        openFile.getline(buf, 256);        buf[255] = '\0';                    if(strncmp(buf, user, 6) == 0)        {            tmp = buf;        }    }    openFile.close();    if(tmp == "")    {        cpLog(LOG_ERR, "could not find an entry for %s in %s", user, filename);    }    else    {        cpLog(LOG_DEBUG, "found user %s in file %s", user, filename);    }    return tmp;}void PSSecret::update(bool force){    Vocal::Threads::Lock x(myMutex);    FileStat readStat(myReadFile);    if(force || (readStat.lastModified() > myReadLastModified))    {        cpLog(LOG_DEBUG_STACK, "trying to read file: %s", myReadFile.c_str());        // do this if the file has changed        try        {            myReadSecret = readEntry(myReadFile.c_str(), "reader:");            myReadLastModified = readStat.lastModified();        }        catch (VException& e)        {            cpLog(LOG_ERR, "failed to read reader password from %s (cannot get data from pserver)",                  myReadFile.c_str());            myReadSecret = "";        }    }    else    {        cpLog(LOG_DEBUG_STACK, "skipping rereading %s because up to date",              myReadFile.c_str());    }    FileStat writeStat(myWriteFile);    if(force || (writeStat.lastModified() > myWriteLastModified))    {        cpLog(LOG_DEBUG_STACK, "trying to read file: %s", myWriteFile.c_str());        try        {            myWriteSecret = readEntry(myWriteFile.c_str(), "vocal:");            myWriteLastModified = writeStat.lastModified();        }        catch (VException& e)        {            cpLog(LOG_DEBUG, "failed to read writer password from %s (cannot synchronize redundant pservers)",                  myReadFile.c_str());            myWriteSecret = "";        }    }    else    {        cpLog(LOG_DEBUG_STACK, "skipping rereading %s because up to date",              myWriteFile.c_str());    }}Data PSSecret::readSecret(){    if(!instance_)    {        cpLog(LOG_ALERT, "you should not create PSSecret from scratch! -- you must instantiate first");        assert(0);//        exit(-1);        PSSecret::create(VOCAL_INSTALL_PATH "/etc/vocal.secret", VOCAL_INSTALL_PATH "/etc/vocal.secret"); // xxx we should read from the vocal.conf file    }    instance_->update(false);    LocalScopeAllocator lo;    cpLog(LOG_DEBUG_STACK, "read secret: %s", instance_->myReadSecret.getData(lo));    if(instance_->myReadSecret == "")    {        cpLog(LOG_ERR, "read secret is empty!");    }    return instance_->myReadSecret;}Data PSSecret::writeSecret(){    if(!instance_)    {        cpLog(LOG_ALERT, "you should not create PSSecret from scratch! -- you must instantiate first");        assert(0);//        exit(-1);        PSSecret::create(VOCAL_INSTALL_PATH "/etc/vocal.secret", VOCAL_INSTALL_PATH "/etc/vocal.secret"); // xxx we should read from the vocal.conf file    }    instance_->update(false);    LocalScopeAllocator lo;    cpLog(LOG_DEBUG_STACK, "write secret: %s", instance_->myWriteSecret.getData(lo));    if(instance_->myWriteSecret == "")    {        cpLog(LOG_DEBUG, "write secret is empty!");    }    return instance_->myWriteSecret;}/* Local Variables: *//* c-file-style: "stroustrup" *//* indent-tabs-mode: nil *//* c-file-offsets: ((access-label . -) (inclass . ++)) *//* c-basic-offset: 4 *//* End: */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -