示例#1
0
void l4dtoolz::OnChangeMaxplayers ( IConVar *var, const char *pOldValue, float flOldValue )
{
	if (max_players_friend_lobby == NULL || max_players_connect == NULL || max_players_server_browser == NULL || lobby_sux_ptr == NULL){
		Msg("sv_maxplayers init error\n");
		return;
	}
	if(((ConVar*)var)->GetInt() >= 0){
		max_players_new[4] = friends_lobby_new[3] = server_bplayers_new[3] = ((ConVar*)var)->GetInt();
		if(lobby_match_ptr != NULL){
			lobby_match_new[2] = ((ConVar*)var)->GetInt();
			WriteSignature(lobby_match_ptr, (const char*)lobby_match_new);
		}else{
			Msg("sv_maxplayers MS init error\n");
		}
		WriteSignature(max_players_friend_lobby, (const char*)friends_lobby_new);
		WriteSignature(max_players_connect, (const char*)max_players_new);
		WriteSignature(lobby_sux_ptr, lobby_sux_new);
		WriteSignature(max_players_server_browser, (const char*)server_bplayers_new);
	}else{
		WriteSignature(max_players_friend_lobby, friends_lobby_org);
		WriteSignature(max_players_connect, max_players_org);
		WriteSignature(lobby_sux_ptr, lobby_sux_org);
		WriteSignature(max_players_server_browser, server_bplayers_org);
		
		if(lobby_match_ptr != NULL)
			WriteSignature(lobby_match_ptr, lobby_match_org);
	}
}
示例#2
0
void l4dtoolz::OnChangeIvailosp ( IConVar *var, const char *pOldValue, float flOldValue )
{
	if(tmp_player == NULL || tmp_player2 == NULL){
		Msg("L4DToolZ init error\n");
		return;
	}
	WriteSignature(tmp_player, players_org);
	WriteSignature(tmp_player2, players_org2);
}
示例#3
0
void l4dtoolz::OnChangeRemovehumanlimit ( IConVar *var, const char *pOldValue, float flOldValue )
{
	if(chuman_limit == NULL){
		Msg( "sv_removehumanlimit init error\n");
		return;
	}
	if( ((ConVar*)var)->GetInt() == 1){
		WriteSignature(chuman_limit, human_limit_new);
	}else{
		WriteSignature(chuman_limit, human_limit_org);
	}
}
示例#4
0
void l4dtoolz::OnChangeUnreserved ( IConVar *var, const char *pOldValue, float flOldValue )
{
	if(unreserved_ptr == NULL ){
		Msg("unreserved_ptr init error\n");
		return;
	}
	if( ((ConVar*)var)->GetInt() == 1){
		WriteSignature(unreserved_ptr, unreserved_new);
		engine->ServerCommand("sv_allow_lobby_connect_only 0\n");
	}else{
		WriteSignature(unreserved_ptr, unreserved_org);
	}
	
}
示例#5
0
 bool Write( ostream& out ) const { 
     return 
         WriteByteOrder( out ) && 
         WriteHeader( out ) && 
         WriteSignature( out ) && 
         WriteData( out ); 
 }
示例#6
0
void WriteTokens( char *signature,
                  char *table,
                  ListNode *reserved,
                  ListNode *structs,
                  ListNode *unions,
                  ListNode *vec_secs,
                  ListNode *macros,
                  ListNode *primitives )
{   FILE *outfile = open_table_file( table, INIT_FILE, EXT_H );

    fprintf( outfile, "\n"
"                 /* Header file for %s cmodes definition module */\n",
                      table );
    sprintf( buffer, "_%s%s%s_%s",
                     table, FILENAME_SEPERATOR, INIT_FILE, EXT_H );
    fprintf( outfile, "\n#ifndef %s\n#define %s\n\n#include \"cmodes.h\"\n\n",
                      buffer, buffer );

    if( signature != NULL )
    {  WriteSignature( outfile, table, signature);
    }
    WriteReservedTokens( outfile, reserved);
    WriteStructTokens( outfile, table, structs);
    WriteUnionTokens( outfile, table, unions);
    WriteVec_SecTokens( outfile, table, reserved, vec_secs);
    WriteAccessMacros( outfile, macros );
    WritePrimitiveSorts( outfile, primitives );
    WriteExterns( outfile, table);

    fprintf( outfile, "#endif\n\n" );
    fclose(outfile);
}
示例#7
0
bool l4dtoolz::Unload(char *error, size_t maxlen)
{

#if !defined METAMOD_PLAPI_VERSION
	SH_RELEASE_CALLCLASS(m_EngineCC);
#endif

	if(max_players_friend_lobby != NULL)
		WriteSignature(max_players_friend_lobby, friends_lobby_org);
	if(max_players_connect != NULL)
		WriteSignature(max_players_connect, max_players_org);
	if(lobby_sux_ptr != NULL)
		WriteSignature(lobby_sux_ptr, lobby_sux_org);
	if(max_players_server_browser != NULL)
		WriteSignature(max_players_server_browser, server_bplayers_org);
	if(chuman_limit != NULL)
		WriteSignature(chuman_limit, human_limit_org);

	if(tmp_player != NULL)
		WriteSignature(tmp_player, players_org);
	if(tmp_player2 != NULL)
		WriteSignature(tmp_player2, players_org2);
	if(unreserved_ptr != NULL)
		WriteSignature(unreserved_ptr, unreserved_org);
	if(lobby_match_ptr != NULL)
		WriteSignature(lobby_match_ptr, lobby_match_org);

#ifdef WIN32
	CloseHandle(hProcess);
#endif

	delete[] friends_lobby_org;
	delete[] max_players_org;
	delete[] lobby_sux_org;
	delete[] server_bplayers_org;
	delete[] human_limit_org;
	delete[] players_org;
	delete[] players_org2;
	delete[] unreserved_org;
	return true;
}
示例#8
0
HRESULT COutArchive::Create(ISequentialOutStream *stream, bool endMarker)
{
  Close();
  #ifdef _7Z_VOL
  // endMarker = false;
  _endMarker = endMarker;
  #endif
  SeqStream = stream;
  if (!endMarker)
  {
    SeqStream.QueryInterface(IID_IOutStream, &Stream);
    if (!Stream)
    {
      return E_NOTIMPL;
      // endMarker = true;
    }
  }
  #ifdef _7Z_VOL
  if (endMarker)
  {
    /*
    CStartHeader sh;
    sh.NextHeaderOffset = (UInt32)(Int32)-1;
    sh.NextHeaderSize = (UInt32)(Int32)-1;
    sh.NextHeaderCRC = 0;
    WriteStartHeader(sh);
    */
  }
  else
  #endif
  {
    if (!Stream)
      return E_FAIL;
    RINOK(WriteSignature());
    RINOK(Stream->Seek(0, STREAM_SEEK_CUR, &_prefixHeaderPos));
  }
  return S_OK;
}
示例#9
0
bool
IMI::FlightDownload(Port &port, const RecordedFlightInfo &flight_info,
                    Path path, OperationEnvironment &env)
{
  if (!_connected)
    return false;

  MessageParser::Reset();

  Flight flight;
  if (!FlashRead(port, &flight, flight_info.internal.imi, sizeof(flight), env))
    return false;

  FILE *fileIGC = _tfopen(path.c_str(), _T("w+b"));
  if (fileIGC == nullptr)
    return false;

  unsigned fixesCount = COMM_MAX_PAYLOAD_SIZE / sizeof(Fix);
  Fix *fixBuffer = (Fix*)malloc(sizeof(Fix) * fixesCount);
  if (fixBuffer == nullptr)
    return false;

  bool ok = true;

  WriteHeader(flight.decl, flight.signature.tampered, fileIGC);

  int noenl = 0;
  if ((flight.decl.header.sensor & IMINO_ENL_MASK) != 0)
    noenl = 1;

  unsigned address = flight_info.internal.imi + sizeof(flight);

  unsigned fixesRemains = flight.finish.fixes;
  while (ok && fixesRemains) {
    unsigned fixesToRead = fixesRemains;
    if (fixesToRead > fixesCount)
      fixesToRead = fixesCount;

    if (!FlashRead(port, fixBuffer, address, fixesToRead * sizeof(Fix), env))
      ok = false;

    for (unsigned i = 0; ok && i < fixesToRead; i++) {
      const Fix *pFix = fixBuffer + i;
      if (IMIIS_FIX(pFix->id))
        WriteFix(*pFix, false, noenl, fileIGC);
    }

    address = address + fixesToRead * sizeof(Fix);
    fixesRemains -= fixesToRead;

    if (env.IsCancelled())
      // canceled by user
      ok = false;
  }

  free(fixBuffer);

  if (ok)
    WriteSignature(flight.signature, flight.decl.header.sn, fileIGC);

  fclose(fileIGC);

  if (!ok)
    File::Delete(Path(path));

  return ok;
}
示例#10
0
bool l4dtoolz::Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late)
{
#ifdef WIN32
	hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE, GetCurrentProcessId());
#endif
	PLUGIN_SAVEVARS();

	GET_V_IFACE_CURRENT(GetEngineFactory, engine, IVEngineServer, INTERFACEVERSION_VENGINESERVER);
	GET_V_IFACE_CURRENT(GetEngineFactory, icvar, ICvar, CVAR_INTERFACE_VERSION);


#if defined METAMOD_PLAPI_VERSION
	if ((vsp_callbacks = ismm->GetVSPInfo(NULL)) == NULL)
#endif
	{
		ismm->AddListener(this, this);
		ismm->EnableVSPListener();
	}


#if !defined METAMOD_PLAPI_VERSION
	m_EngineCC = SH_GET_CALLCLASS(engine);
#endif

#if SOURCE_ENGINE >= SE_ORANGEBOX
	g_pCVar = icvar;
	ConVar_Register(0, &s_BaseAccessor);
#else
	ConCommandBaseMgr::OneTimeInit(&s_BaseAccessor);
#endif

	char* base_addr = NULL;
	size_t base_len = 0;

	find_base(matchmaking_dll, base_addr, base_len);

#ifdef WIN32
	if(base_addr == NULL)
		find_base("matchmaking.dll", base_addr, base_len);
#endif

	if(lobby_match_ptr == NULL){
		lobby_match_ptr = (char*)FindSignature(lobby_match, base_addr, base_len, true);
		get_org_sig(lobby_match, (const char*)lobby_match_new, lobby_match_org);
	}

	find_base(engine_dll, base_addr, base_len);
	if(max_players_friend_lobby == NULL){
		max_players_friend_lobby = (char*)FindSignature(friends_lobby, base_addr, base_len);
		get_org_sig(max_players_friend_lobby, (const char*)friends_lobby_new, friends_lobby_org);
	}
	if(max_players_connect == NULL){
		max_players_connect = (char*)FindSignature(max_players, base_addr, base_len);
		if(max_players_connect != NULL){
			get_org_sig(max_players_connect, (const char*)max_players_new, max_players_org);
		}
	}
	if(lobby_sux_ptr==NULL){

#ifdef WIN32
		lobby_sux_ptr = max_players_connect;
#else
		lobby_sux_ptr = (char*)FindSignature(lobby_sux, base_addr, base_len);
#endif
		if(lobby_sux_ptr!=NULL){
			get_org_sig(lobby_sux_ptr, lobby_sux_new, lobby_sux_org);
		}
	}
#ifdef WIN32
	if(max_players_server_browser == NULL){
		max_players_server_browser = (char*)FindSignature(server_bplayers, base_addr, base_len);
		get_org_sig(max_players_server_browser, (const char*)server_bplayers_new, server_bplayers_org);
	}
#endif
	if(tmp_player == NULL){
		tmp_player = (char*)FindSignature(players, base_addr, base_len);
		if(tmp_player != NULL){
#ifdef WIN32
			tmp_player2 = (char*)FindSignature(players2, base_addr, base_len);
#else
			tmp_player2 = tmp_player;
#endif
			if(tmp_player2 != NULL){
				get_org_sig(tmp_player, players_new, players_org);
				WriteSignature(tmp_player, players_new);
				get_org_sig(tmp_player2, players_new2, players_org2);
				WriteSignature(tmp_player2, players_new2);
				engine->ServerCommand("maxplayers 32\n");
				engine->ServerCommand("L4DToolZ [email protected]\n");
			}
		}
	}
	if(unreserved_ptr==NULL){
		unreserved_ptr = (char*)FindSignature(unreserved, base_addr, base_len);
		get_org_sig(unreserved_ptr, unreserved_new, unreserved_org);
	}

	find_base(server_dll, base_addr, base_len);

	if(chuman_limit == NULL){
		chuman_limit = (char*)FindSignature(human_limit, base_addr, base_len);
		get_org_sig(chuman_limit, human_limit_new, human_limit_org);
	}

#ifndef WIN32
	if(max_players_server_browser == NULL){
		max_players_server_browser = (char*)FindSignature(server_bplayers, base_addr, base_len);
		get_org_sig(max_players_server_browser, (const char*)server_bplayers_new, server_bplayers_org);
	}
#endif

	return true;
}
示例#11
0
    void WriteAppx(
        const FilePtr &zip,
        const std::unordered_map<std::string, std::string> &fileNames,
        const std::string *certPath, int compressionLevel, bool isBundle)
    {
        FileSink zipRawSink(zip.get());
        OffsetSink zipOffsetSink;
        auto zipSink = MakeMultiSink(zipRawSink, zipOffsetSink);
        std::vector<ZIPFileEntry> zipFileEntries;
        std::pair<std::string, std::string> appxBundleManifest;

        APPXDigests digests;

        // Write and hash the ZIP content.
        {
            SHA256Sink axpcSink;
            auto sink = MakeMultiSink(zipSink, axpcSink);
            for (const auto &fileNamePair : fileNames) {
                const std::string &archiveName = fileNamePair.first;
                const std::string &fileName = fileNamePair.second;

                const std::string suffix = "AppxBundleManifest.xml";
                if (isBundle &&
                        suffix.size() < archiveName.size() &&
                        std::equal(suffix.rbegin(), suffix.rend(), archiveName.rbegin())) {
                    appxBundleManifest = fileNamePair;
                    continue;
                }

                zipFileEntries.emplace_back(
                    WriteZIPFileEntry(sink, zipOffsetSink.Offset(), fileName,
                                      archiveName, compressionLevel));
            }

            if (isBundle) {
                ZIPFileEntry appxBundleManifestEntry = WriteAppxBundleManifestZIPFileEntry(
                    sink,
                    zipOffsetSink.Offset(),
                    appxBundleManifest.second,
                    appxBundleManifest.first, compressionLevel,
                        zipFileEntries);
                zipFileEntries.emplace_back(std::move(appxBundleManifestEntry));
            }

            // this creates AppxBlockMap.xml file
            ZIPFileEntry blockMap = WriteAppxBlockMapZIPFileEntry(
                sink, zipOffsetSink.Offset(), zipFileEntries, isBundle);
            digests.axbm = blockMap.sha256;
            zipFileEntries.emplace_back(std::move(blockMap));

            // this creates [Content_Types].xml
            ZIPFileEntry contentTypes = WriteContentTypesZIPFileEntry(
                sink, zipOffsetSink.Offset(), isBundle, zipFileEntries);
            digests.axct = contentTypes.sha256;
            zipFileEntries.emplace_back(std::move(contentTypes));

            digests.axpc = axpcSink.SHA256();
        }

        // Hash (but do not write) the directory, pre-signature.
        {
            SHA256Sink axcdSink;
            OffsetSink tmpOffsetSink = zipOffsetSink;
            auto sink = MakeMultiSink(axcdSink, tmpOffsetSink);
            for (const ZIPFileEntry &entry : zipFileEntries) {
                entry.WriteDirectoryEntry(sink);
            }
            WriteZIPEndOfCentralDirectoryRecord(sink, tmpOffsetSink.Offset(),
                                                zipFileEntries);
            digests.axcd = axcdSink.SHA256();
        }

        // Sign and write the signature.
        if (certPath) {
            zipFileEntries.emplace_back(WriteSignature(
                zipSink, *certPath, digests, zipOffsetSink.Offset()));
        }

        // Write the directory.
        for (const ZIPFileEntry &entry : zipFileEntries) {
            entry.WriteDirectoryEntry(zipSink);
        }
        WriteZIPEndOfCentralDirectoryRecord(zipSink, zipOffsetSink.Offset(),
                                            zipFileEntries);
    }