403Webshell
Server IP : 162.241.219.206  /  Your IP : 216.73.216.195
Web Server : Apache
System : Linux box5669.bluehost.com 5.14.0-687.15.1.el9_8.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Jun 11 08:51:45 EDT 2026 x86_64
User : signavd5 ( 2863)
PHP Version : 8.3.32
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/share/doc/firebird/sample/interfaces/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/share/doc/firebird/sample/interfaces/10.backup.cpp
/*
 *	PROGRAM:	Object oriented API samples.
 *	MODULE:		10.backup.cpp
 *	DESCRIPTION:	A sample of making backup of database using service manager.
 *
 *					Example for the following interfaces:
 *					IService - interface to work with service manager.
 *
 *  The contents of this file are subject to the Initial
 *  Developer's Public License Version 1.0 (the "License");
 *  you may not use this file except in compliance with the
 *  License. You may obtain a copy of the License at
 *  http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_idpl.
 *
 *  Software distributed under the License is distributed AS IS,
 *  WITHOUT WARRANTY OF ANY KIND, either express or implied.
 *  See the License for the specific language governing rights
 *  and limitations under the License.
 *
 *  The Original Code was created by Alexander Peshkoff
 *  for the Firebird Open Source RDBMS project.
 *
 *  Copyright (c) 2016 Alexander Peshkoff <peshkoff@mail.ru>
 *  and all contributors signed below.
 *
 *  All Rights Reserved.
 *  Contributor(s): ______________________________________.
 *
 */

#include "ifaceExamples.h"

static IMaster* master = fb_get_master_interface();

// print information, returned by isc_svc_query() call

bool printLine(const unsigned char*& p)
{
	const ISC_USHORT length = (ISC_USHORT) isc_vax_integer((char*) p, sizeof(ISC_USHORT));
	p += sizeof(ISC_USHORT);
	if (length > 0)
		printf("%*.*s\n", length, length, p);
	p += length;
	return length > 0;
}

bool printInfo(const unsigned char* p, size_t pSize)
{
	bool ret = false;
	bool ignoreTruncation = false;
	const unsigned char* const end = p + pSize;

	while (p < end && *p != isc_info_end)
	{
		switch (*p++)
		{
		case isc_info_svc_line:
			ret = printLine(p);
			break;

		case isc_info_truncated:
			if (!ignoreTruncation)
				printf("\n<<< truncated >>>\n");

			fflush(stdout);
			ret = true;
			break;

		case isc_info_svc_timeout:
		case isc_info_data_not_ready:
			ret = true;
			break;

		default:
			printf("Unknown item 0x%x in received buffer\n", p[-1]);
		}
	}

	fflush(stdout);
	return ret;
}


int main()
{
	int rc = 0;

	// Status wrapper
	ThrowStatusWrapper status(master->getStatus());

	// Declare pointers to required interfaces
	IProvider* prov = master->getDispatcher();
	IUtil* utl = master->getUtilInterface();
	IService* svc = NULL;
	IXpbBuilder* spb1 = NULL;
	IXpbBuilder* spb2 = NULL;

	try
	{
		printf("** Attaching to service manager...\n");

		// Prepare SPB to attach to service manager
		spb1 = utl->getXpbBuilder(&status, IXpbBuilder::SPB_ATTACH, NULL, 0);
		spb1->insertString(&status, isc_spb_user_name, "sysdba");
		spb1->insertString(&status, isc_spb_password, "masterkey");
		// In case when your program is expected to be used on a server
		// with multiple security database it's very good idea to specify
		// DB expected to be used by services (you anyway need separate
		// services connectons for databases with different user list location).
		spb1->insertString(&status, isc_spb_expected_db, "employee.fdb");

		// Attach to service manager
		svc = prov->attachServiceManager(&status, "service_mgr", spb1->getBufferLength(&status),
			spb1->getBuffer(&status));

		// In the simplest case sendItems parameter may be NULL
		// Building receiveItems is mostly trivial
		const unsigned char receiveItems[] = {isc_info_svc_server_version};

		// Output buffer
		unsigned char results[1024];

		printf("** Demo of making backup using service manager...\n");

		// Build service start SPB
		spb2 = utl->getXpbBuilder(&status, IXpbBuilder::SPB_START, NULL, 0);
		spb2->insertTag(&status, isc_action_svc_backup);
		spb2->insertString(&status, isc_spb_dbname, "employee.fdb");
		spb2->insertString(&status, isc_spb_bkp_file, "employee.fbk");
		spb2->insertInt(&status, isc_spb_options, isc_spb_bkp_no_garbage_collect);

		// Start service
		svc->start(&status, spb2->getBufferLength(&status), spb2->getBuffer(&status));

		// Prepare receiveItems block
		const unsigned char receiveItems2[] = {isc_info_svc_line};

		// Query service output
		do
		{
			svc->query(&status, 0, NULL, sizeof(receiveItems2), receiveItems2, sizeof(results), results);
		} while (printInfo(results, sizeof(results)));

		printf("** Detaching from service manager...\n");

		// Detach from service manager
		svc->detach(&status);
		svc = NULL;

		printf("** Done.\n");
	}
	catch (const FbException& error)
	{
		// handle error
		rc = 1;

		char buf[256];
		master->getUtilInterface()->formatStatus(buf, sizeof(buf), error.getStatus());
		fprintf(stderr, "%s\n", buf);
	}

	// release interfaces after error caught
	if (svc)
		svc->release();

	// generic cleanup
	prov->release();
	status.dispose();

	if (spb1)
		spb1->dispose();

	if (spb2)
		spb2->dispose();

	return rc;
}

Youez - 2016 - github.com/yon3zu
LinuXploit