示例#1
0
文件: pipe.c 项目: berkus/nemesis
static void Wr_PutC_m (
        Wr_cl   *self,
        int8_t  ch      /* IN */ )
{
    Pipe_st *st = self->st;
    bool_t ok;

    wr_enter(st);

    ok=wr_put(st, &ch, 1);

    wr_leave(st);

    if (!ok) {
	RAISE_Wr$Failure(0); /* Reader closed */
    }
}
示例#2
0
文件: pipe.c 项目: berkus/nemesis
static void Wr_PutChars_m (
        Wr_cl   *self,
        Wr_Buffer       s       /* IN */,
        uint64_t        nb      /* IN */ )
{
    Pipe_st *st = self->st;
    bool_t ok;

    wr_enter(st);

    ok=wr_put(st, s, nb);

    wr_leave(st);

    if (!ok) {
	RAISE_Wr$Failure(0);
    }
}
示例#3
0
Future<Future<Nothing>> StandaloneMasterContender::contend()
{
  if (!initialized) {
    return Failure("Initialize the contender first");
  }

  if (promise != nullptr) {
    LOG(INFO) << "Withdrawing the previous membership before recontending";
    promise->set(Nothing());
    delete promise;
  }

  // Directly return a future that is always pending because it
  // represents a membership/leadership that is not going to be lost
  // until we 'withdraw'.
  promise = new Promise<Nothing>();
  return promise->future();
}
示例#4
0
void ViewTest2::TestOverlay()
{
	OLECHAR rgchGuid[] = L"F121F260";
	IVwOverlayPtr qxvoTest1, qxvoTest2;
	qxvoTest1.CreateInstance(CLSID_VwOverlay);
	qxvoTest2.CreateInstance(CLSID_VwOverlay);

	CheckHr(qxvoTest1->SetTagInfo(rgchGuid, 5, kosmAll, SmartBstr(L"DDDDD"), SmartBstr(L"WWWWW"),
		0x00003300, 0x00000000, 0x00330033, 4, true));

	m_psts->Output("  FUNCTION: put_Overlay(qxvoTest1)\n");
	CheckHr(m_qrootb->put_Overlay(qxvoTest1));

	m_psts->Output("  FUNCTION: get_Overlay(&qxvoTest2)\n");
	CheckHr(m_qrootb->get_Overlay(&qxvoTest2));
	if (qxvoTest1 != qxvoTest2)
		Failure("Overlay returned wrong result");
}
示例#5
0
文件: pipe.c 项目: berkus/nemesis
static void Rd_UnGetC_m (
        Rd_cl   *self )
{
    Pipe_st *st = self->st;
    bool_t ok;

    rd_enter(st);

    if (st->ungetc || st->lastc==-1) {
	ok=False; /* Already done an UnGetC, or no last character */
    } else {
	st->ungetc=True;
	ok=True;
    }

    rd_leave(st);
    if (!ok) RAISE_Rd$Failure(3); /* Can't unget */
}
示例#6
0
void CTlsSocket::ContinueShutdown()
{
	m_pOwner->LogMessage(Debug_Verbose, _T("CTlsSocket::ContinueShutdown()"));

	int res = gnutls_bye(m_session, GNUTLS_SHUT_WR);
	if (!res)
	{
		m_tlsState = closed;

		CSocketEvent *evt = new CSocketEvent(m_pEvtHandler, this, CSocketEvent::close);
		CSocketEventDispatcher::Get().SendEvent(evt);

		return;
	}

	if (res != GNUTLS_E_INTERRUPTED && res != GNUTLS_E_AGAIN)
		Failure(res, ECONNABORTED);
}
示例#7
0
    Verdict scoreOnTestCase(string testCaseName) {
        string testCaseOutputFilename = generator->getTestCasesDir() + "/" + testCaseName + ".out";

        string diffCommand = "diff --unchanged-line-format=' %.2dn    %L' --old-line-format='(expected) [line %.2dn]    %L' --new-line-format='(received) [line %.2dn]    %L' " + testCaseOutputFilename + " _submission.out | head -n 10";
        ExecutionResult result = os->execute(testCaseName + "-submission-scoring", diffCommand, "", "_diff.out", "");

        string briefDiffCommand = "diff --brief _submission.out " + testCaseOutputFilename;
        ExecutionResult briefResult = os->execute(testCaseName + "-submission-scoring-brief", briefDiffCommand, "", "", "");

        if (briefResult.exitStatus == 0) {
            return Verdict::accepted();
        } else {
            string diff = string(istreambuf_iterator<char>(*result.outputStream), istreambuf_iterator<char>());
            return Verdict::wrongAnswer({
                Failure("Diff:\n" + diff, 0)
            });
        }
    }
示例#8
0
void CTlsSocket::ContinueShutdown()
{
	m_pOwner->LogMessage(MessageType::Debug_Verbose, _T("CTlsSocket::ContinueShutdown()"));

	int res = gnutls_bye(m_session, GNUTLS_SHUT_WR);
	while ((res == GNUTLS_E_INTERRUPTED || res == GNUTLS_E_AGAIN) && m_canWriteToSocket)
		res = gnutls_bye(m_session, GNUTLS_SHUT_WR);
	if (!res) {
		m_tlsState = TlsState::closed;

		m_pEvtHandler->send_event<CSocketEvent>(this, SocketEventType::close, 0);

		return;
	}

	if (res != GNUTLS_E_INTERRUPTED && res != GNUTLS_E_AGAIN)
		Failure(res, true);
}
示例#9
0
bool
CAudioScrobbler::SendNowPlaying(mpd_Song* song)
{
	bool retval = false;
	if(!song || !song->artist || !song->title) return retval;

	char* artist = curl_easy_escape(_handle, song->artist, 0);
	char* title = curl_easy_escape(_handle, song->title, 0);
	char* album = 0;
	if(song->album)
		album = curl_easy_escape(_handle, song->album, 0);

	std::ostringstream query, sig;
	query << "method=track.updateNowPlaying&track=" << title << "&artist=" << artist << "&duration=" << song->time << "&api_key=" << APIKEY << "&sk=" << _sessionid;
	if(album) {
		query << "&album=" << album;
		sig << "album" << song->album;
	}

    curl_free(artist);
    curl_free(title);
    curl_free(album);

	sig << "api_key" << APIKEY << "artist" << song->artist << "duration" << song->time << "methodtrack.updateNowPlaying" << "sk" << _sessionid << "track" << song->title << SECRET;

	std::string sighash(md5sum((char*)"%s", sig.str().c_str()));

	query << "&api_sig=" << sighash;

	OpenURL(ROOTURL, query.str().c_str());

	if(_response.find("<lfm status=\"ok\">") != std::string::npos) {
		iprintf("%s", "Updated \"Now Playing\" status successfully.");
		retval = true;
	}
	else if(_response.find("<lfm status=\"failed\">") != std::string::npos) {
		eprintf("%s%s", "Last.fm returned an error while updating the currently playing track:\n", _response.c_str());
		if(CheckFailure(_response))
			Failure();
	}

	CLEANUP();
	return retval;
}
示例#10
0
unsigned TrapAccess( trap_elen num_in_mx, in_mx_entry_p mx_in, trap_elen num_out_mx, mx_entry_p mx_out  )
{
    trap_retval     result;

    if( ReqFunc == NULL )
        return( (unsigned)-1 );

    result = ReqFuncProxy( num_in_mx, mx_in, num_out_mx, mx_out );
    if( result == REQUEST_FAILED ) {
        Failure();
    }
    Access();
#if defined( __WINDOWS__ ) && !defined( SERVER )
    TrapHardModeCheck();
#endif
    if( result == REQUEST_FAILED )
        return( (unsigned)-1 );
    return( result );
}
示例#11
0
NetworkManager::VpnPlugin::VpnPlugin(const QString &path, QObject *parent)
    : QObject(parent), d_ptr(new VpnPluginPrivate(path))
{
    Q_D(VpnPlugin);
    d->state = (NetworkManager::VpnConnection::State)d->iface.state();

    QObject::connect(&d->iface, SIGNAL(Config(QVariantMap)),
                     this, SLOT(setConfig(QVariantMap)));
    QObject::connect(&d->iface, SIGNAL(Failure(uint)),
                     this, SLOT(setFailure(QString)));
    QObject::connect(&d->iface, SIGNAL(Ip4Config(QVariantMap)),
                     this, SLOT(setIp4Config(QVariantMap)));
    QObject::connect(&d->iface, SIGNAL(Ip6Config(QVariantMap)),
                     this, SLOT(setIp6Config(QVariantMap)));
    //QObject::connect(&d->iface, SIGNAL(LoginBanner(QString)),
    //        this, SLOT(onLoginBanner(QString)));
    QObject::connect(&d->iface, SIGNAL(StateChanged(uint)),
                     this, SLOT(onStateChanged(uint)));
}
示例#12
0
void CTlsSocket::ContinueShutdown()
{
	m_pOwner->LogMessage(Debug_Verbose, _T("CTlsSocket::ContinueShutdown()"));

	int res = gnutls_bye(m_session, GNUTLS_SHUT_WR);
	if (!res)
	{
		m_tlsState = closed;

		wxSocketEvent evt(GetId());
		evt.m_event = wxSOCKET_LOST;
		wxPostEvent(m_pEvtHandler, evt);

		return;
	}

	if (res != GNUTLS_E_INTERRUPTED && res != GNUTLS_E_AGAIN)
		Failure(res);
}
示例#13
0
AvahiService::AvahiService(const QString &n, const QString &type, const QString &domain)
    : name(n)
    , port(0)
{
    static bool registeredTypes=false;
    if (!registeredTypes) {
        qDBusRegisterMetaType<QList<QByteArray> >();
        registeredTypes=true;
    }

    org::freedesktop::Avahi::Server server("org.freedesktop.Avahi", "/", QDBusConnection::systemBus());
    QDBusReply<QDBusObjectPath> reply=server.ServiceResolverNew(-1, -1, name, type, Avahi::domainToDNS(domain), -1, 8 /*AVAHI_LOOKUP_NO_ADDRESS|AVAHI_LOOKUP_NO_TXT*/);

    if (reply.isValid()) {
        resolver=new OrgFreedesktopAvahiServiceResolverInterface("org.freedesktop.Avahi", reply.value().path(), QDBusConnection::systemBus());
        connect(resolver, SIGNAL(Found(int,int,const QString &,const QString &,const QString &,const QString &, int, const QString &,ushort,const QList<QByteArray>&, uint)),
                this, SLOT(resolved(int,int,const QString &,const QString &,const QString &,const QString &, int, const QString &,ushort, const QList<QByteArray>&, uint)));
        connect(resolver, SIGNAL(Failure(QString)), this, SLOT(error(QString)));
    }
示例#14
0
Future<Owned<T>> Shared<T>::own()
{
  // If two threads simultaneously access this object and at least one
  // of them is a write, the behavior is undefined. This is similar to
  // boost::shared_ptr. For more details, please refer to the boost
  // shared_ptr document (section "Thread Safety").
  if (data.get() == NULL) {
    return Owned<T>(NULL);
  }

  bool false_value = false;
  if (!data->owned.compare_exchange_strong(false_value, true)) {
    return Failure("Ownership has already been transferred");
  }

  Future<Owned<T>> future = data->promise.future();
  data.reset();
  return future;
}
示例#15
0
void CTlsSocket::ContinueShutdown()
{
	m_pOwner->LogMessage(MessageType::Debug_Verbose, _T("CTlsSocket::ContinueShutdown()"));

	int res = gnutls_bye(m_session, GNUTLS_SHUT_WR);
	while ((res == GNUTLS_E_INTERRUPTED || res == GNUTLS_E_AGAIN) && m_canWriteToSocket)
		res = gnutls_bye(m_session, GNUTLS_SHUT_WR);
	if (!res) {
		m_tlsState = TlsState::closed;

		CSocketEvent *evt = new CSocketEvent(m_pEvtHandler, this, CSocketEvent::close);
		CSocketEventSource::dispatcher_.SendEvent(evt);

		return;
	}

	if (res != GNUTLS_E_INTERRUPTED && res != GNUTLS_E_AGAIN)
		Failure(res, true);
}
示例#16
0
// Return the number of items in the sequence.
int MHParseNode::GetArgCount()
{
    if (m_nNodeType == PNTagged)
    {
        MHPTagged *pTag = (MHPTagged *)this;
        return pTag->m_Args.Size();
    }
    else if (m_nNodeType == PNSeq)
    {
        MHParseSequence *pSeq = (MHParseSequence *)this;
        return pSeq->Size();
    }
    else
    {
        Failure("Expected tagged value");
    }

    return 0; // To keep the compiler happy
}
示例#17
0
int CTlsSocket::ContinueHandshake()
{
	m_pOwner->LogMessage(Debug_Verbose, _T("CTlsSocket::ContinueHandshake()"));
	wxASSERT(m_session);
	wxASSERT(m_tlsState == handshake);

	int res = gnutls_handshake(m_session);
	if (!res)
	{
		m_pOwner->LogMessage(Debug_Info, _T("Handshake successful"));

		if (ResumedSession())
			m_pOwner->LogMessage(Debug_Info, _T("Session resumed"));

		const wxString& cipherName = GetCipherName();
		const wxString& macName = GetMacName();

		m_pOwner->LogMessage(Debug_Info, _T("Cipher: %s, MAC: %s"), cipherName.c_str(), macName.c_str());

		res = VerifyCertificate();
		if (res != FZ_REPLY_OK)
			return res;

		if (m_shutdown_requested)
		{
			int error = Shutdown();
			if (!error || error != EAGAIN)
			{
				CSocketEvent *evt = new CSocketEvent(m_pEvtHandler, this, CSocketEvent::close);
				CSocketEventDispatcher::Get().SendEvent(evt);
			}
		}

		return FZ_REPLY_OK;
	}
	else if (res == GNUTLS_E_AGAIN || res == GNUTLS_E_INTERRUPTED)
		return FZ_REPLY_WOULDBLOCK;

	Failure(res, ECONNABORTED);

	return FZ_REPLY_ERROR;
}
示例#18
0
文件: shell.c 项目: adamkuipers/.vim
static char *execute(char *command, int wait) /* {{{1 */
{
	STARTUPINFO si;
	PROCESS_INFORMATION pi;
	ZeroMemory(&si, sizeof(si));
	ZeroMemory(&pi, sizeof(pi));
	si.cb = sizeof(si);
	if (CreateProcess(0, command, 0, 0, 0, CREATE_NO_WINDOW, 0, 0, &si, &pi)) {
		if (wait) {
			WaitForSingleObject(pi.hProcess, INFINITE);
			/* long exit_code; */
			/* TODO: GetExitCodeProcess( pi.hProcess, &exit_code); */
			CloseHandle(pi.hProcess);
			CloseHandle(pi.hThread);
		}
		return Success(NULL);
	} else {
		return Failure(GetError());
	}
}
示例#19
0
void CTlsSocket::CheckResumeFailedWrite()
{
	if (m_lastWriteFailed)
	{
		int res = gnutls_record_send(m_session, 0, 0);
		if (res == GNUTLS_E_INTERRUPTED || res == GNUTLS_E_AGAIN)
			return;
		
		if (res < 0)
		{
			Failure(res);
			return;
		}

		m_writeSkip += res;
		m_lastWriteFailed = false;
		m_canTriggerWrite = true;

		wxASSERT(GNUTLS_E_INVALID_REQUEST == gnutls_record_send(m_session, 0, 0));
	}
}
示例#20
0
文件: http.cpp 项目: Hadoyy/mesos
Future<Response> decode(const string& buffer)
{
  ResponseDecoder decoder;
  deque<Response*> responses = decoder.decode(buffer.c_str(), buffer.length());

  if (decoder.failed() || responses.empty()) {
    for (size_t i = 0; i < responses.size(); ++i) {
      delete responses[i];
    }
    return Failure("Failed to decode HTTP response:\n" + buffer + "\n");
  } else if (responses.size() > 1) {
    PLOG(ERROR) << "Received more than 1 HTTP Response";
  }

  Response response = *responses[0];
  for (size_t i = 0; i < responses.size(); ++i) {
    delete responses[i];
  }

  return response;
}
示例#21
0
Future<size_t> write(int_fd fd, const void* data, size_t size)
{
  process::initialize();

  // TODO(benh): Let the system calls do what ever they're supposed to
  // rather than return 0 here?
  if (size == 0) {
    return 0;
  }

  // Just do a synchronous call.
  if (!fd.is_overlapped()) {
    ssize_t result = os::write(fd, data, size);
    if (result == -1) {
      return Failure(WindowsError().message);
    }
    return static_cast<size_t>(result);
  }

  return windows::write(fd, data, size);
}
示例#22
0
Future<std::set<string> > LevelDBStorageProcess::names()
{
  if (error.isSome()) {
    return Failure(error.get());
  }

  std::set<string> results;

  leveldb::Iterator* iterator = db->NewIterator(leveldb::ReadOptions());

  iterator->SeekToFirst();

  while (iterator->Valid()) {
    results.insert(iterator->key().ToString());
    iterator->Next();
  }

  delete iterator;

  return results;
}
示例#23
0
Future<size_t> socket_send_data(int s, const char* data, size_t size)
{
  CHECK(size > 0);

  while (true) {
    ssize_t length = send(s, data, size, MSG_NOSIGNAL);

#ifdef __WINDOWS__
    int error = WSAGetLastError();
#else
    int error = errno;
#endif // __WINDOWS__

    if (length < 0 && net::is_restartable_error(error)) {
      // Interrupted, try again now.
      continue;
    } else if (length < 0 && net::is_retryable_error(error)) {
      // Might block, try again later.
      return io::poll(s, io::WRITE)
        .then(lambda::bind(&internal::socket_send_data, s, data, size));
    } else if (length <= 0) {
      // Socket error or closed.
      if (length < 0) {
        const string error = os::strerror(errno);
        VLOG(1) << "Socket error while sending: " << error;
      } else {
        VLOG(1) << "Socket closed while sending";
      }
      if (length == 0) {
        return length;
      } else {
        return Failure(ErrnoError("Socket send failed"));
      }
    } else {
      CHECK(length > 0);

      return length;
    }
  }
}
示例#24
0
Future<size_t> socket_send_file(
    Socket socket,
    int fd,
    off_t offset,
    size_t size)
{
  CHECK(size > 0);

  while (true) {
    Try<ssize_t, SocketError> length =
      os::sendfile(socket.get(), fd, offset, size);

    if (length.isSome()) {
      CHECK(length.get() >= 0);
      if (length.get() == 0) {
        // Socket closed.
        VLOG(1) << "Socket closed while sending";
      }
      return length.get();
    }

    if (net::is_restartable_error(length.error().code)) {
      // Interrupted, try again now.
      continue;
    } else if (net::is_retryable_error(length.error().code)) {
      // Might block, try again later.
      return io::poll(socket.get(), io::WRITE)
        .then(lambda::bind(
            &internal::socket_send_file,
            socket,
            fd,
            offset,
            size));
    } else {
      // Socket error or closed.
      VLOG(1) << length.error().message;
      return Failure(length.error());
    };
  }
}
示例#25
0
void Orchard::RateFruit(int id, int ripeness) {
	if (id < 0 || ripeness <= 0) {
		throw InvalidInput();
	}
	//we need to add to both DS's
	try {
		Fruit* fruit = GetFruit(id);
		Plant* plant = GetPlant(fruit->getLocation().msi,
				fruit->getLocation().lsi);
		Fruit* copy = new Fruit(*fruit);
		copy->setRipeRate(ripeness);

		plant->RemoveFruit(id);
		plant->AddFruit(copy);

		Fruits.Remove(id);
		Fruits.Insert(id, copy);

	} catch (KeyDoesNotExist& e) {
		throw Failure();
	}
}
示例#26
0
void CTlsSocket::TrustCurrentCert(bool trusted)
{
	if (m_tlsState != verifycert)
	{
		m_pOwner->LogMessage(Debug_Warning, _T("TrustCurrentCert called at wrong time."));
		return;
	}

	if (trusted)
	{
		m_tlsState = conn;

		wxSocketEvent evt(GetId());
		evt.m_event = wxSOCKET_CONNECTION;
		wxPostEvent(m_pEvtHandler, evt);
		TriggerEvents();
		return;
	}

	m_pOwner->LogMessage(::Error, _("Remote certificate not trusted."));
	Failure(0);
}
示例#27
0
dword Archive::setEOF( Handle * pHandle )
{
	if (! m_Open || !pHandle || m_Access == READ )
		return 0;

	lock();

	// set the file size
	pHandle->size = pHandle->position;

	dword sector = pHandle->sector;
	if ( m_SectorMap[ sector ] != SECTOR_LAST )
	{
		dword freeSector = m_SectorMap[ sector ];
		// mark the current as the last sector
		m_SectorMap[ sector ] = SECTOR_LAST;
		// deallocate sectors beyond the current
		while( freeSector != SECTOR_LAST )
		{
			dword nextSector = m_SectorMap[ freeSector ];
			m_SectorMap[ freeSector ] = SECTOR_FREE;
			freeSector = nextSector;
		}
		//m_SectorMap[ freeSector ] = SECTOR_FREE;

		// since were updating the table, go ahead and update m_Files
		int fileIndex = file( pHandle->key );
		if ( fileIndex < 0 )
			throw Failure();
		m_Files[ fileIndex ].size = pHandle->size;

		// update the table
		writeTable();
	}

	unlock();

	return pHandle->size;
}
示例#28
0
void Pokedex::GetAllPokemonsByLevel(int trainerID, int ** pokemons,
		int *numOfPokemon) {
	if (trainerID == 0||!pokemons ||!numOfPokemon) {
		throw InvalidInput();
	}
	if (trainerID < 0) {
		*numOfPokemon = mainLevelTree.getSize();
		int* pokemonArray = (int*) malloc(sizeof(int) * *numOfPokemon);
		if (pokemonArray == NULL) {
			throw AllocationError();
		}
		Pokemon* levelArray = mainLevelTree.inOrder();
		for (int i = 0; i < *numOfPokemon; i++) {
			pokemonArray[i] = levelArray[i].getID();
		}
		delete[] levelArray;
		*pokemons = pokemonArray;
		return;
	}

	Iterator<Trainer> trainer = trainers.find(TrainerCompare(trainerID));
	if (trainer == trainers.end()) {
		throw Failure();
	}
	//avlTree<Pokemon, pokemonCompareByLevel> trainerLevelTree =	(*trainer).getLevelTree();
	//*numOfPokemon = trainerLevelTree.getSize();
	*numOfPokemon = (*trainer).getLevelTree().getSize();
	int* pokemonArray = (int*) malloc(sizeof(int) * *numOfPokemon);
	if (pokemonArray == NULL) {
		throw AllocationError();
	}
	Pokemon* levelArray = (*trainer).getLevelTree().inOrder();
	for (int i = 0; i < *numOfPokemon; i++) {
		pokemonArray[i] = levelArray[i].getID();
	}
	*pokemons = pokemonArray;
	delete[] levelArray;
	return;
}
MojErr SmtpAccountEnableCommand::GetMailAccountResponse(MojObject& response, MojErr err)
{
	try {
		ResponseToException(response, err);

		MojObject account;

		DatabaseAdapter::GetOneResult(response, account);

		err = account.getRequired(DatabaseAdapter::REV, m_accountRev);
		ErrorToException(err);

		err = account.getRequired(EmailAccountAdapter::OUTBOX_FOLDERID, m_outboxFolderId);
		ErrorToException(err);

		CreateSmtpConfigWatch();
	} catch(const std::exception& e) {
		Failure(e);
	}

	return MojErrNone;
}
示例#30
0
文件: pipe.c 项目: berkus/nemesis
static void Wr_PutStr_m (
        Wr_cl   *self,
        string_t        s       /* IN */ )
{
    Pipe_st *st = self->st;
    bool_t ok=True;
    uint64_t len;

    wr_enter(st);

    len=strlen(s);

    if (len>0) {
	ok=wr_put(st, s, len);
    }

    wr_leave(st);

    if (!ok) {
	RAISE_Wr$Failure(0); /* Reader closed */
    }
}