/*
* Copyright 1995, 1998 Perforce Software.
*
* This file is part of WebKeeper, a perforce client apache module.
*
* License is hereby granted to use this software and distribute it
* freely, as long as this copyright notice is retained and modifications
* are clearly marked.
*
* ALL WARRANTIES ARE HEREBY DISCLAIMED.
*
* $Id: //guest/eric_scouten/webkeeper/mod_webkeep2.cc#1 $
*/
/*
* mod_webkeep2.cc -- C++ glue between webkeeper and Perforce Client API
*
* ClientUserWK sits upon the Perforce ClientApi, and webKeepPrint()
* makes use of ClientUserWK. The web server Apache module mod_webkeep.c
* interfaces to webKeepPrint() through webkeep.h.
*/
# include <clientapi.h>
extern "C" {
# include "mod_webkeep.h"
}
class ClientUserWK : public ClientUser {
public:
void OutputInfo( char level, char *data )
{
int l = strlen( data );
int isBinary = l > 5 && strcmp( data + l - 5, "text)" );
(*printer->data)( printer, isBinary );
}
void OutputError( char *errBuf )
{
(*printer->error)( printer, errBuf );
}
void OutputText( char *data, int length )
{
(*printer->text)( printer, data, length );
}
void OutputBinary( char *data, int length )
{
(*printer->text)( printer, data, length );
}
WebKeepPrinter *printer;
} ;
extern "C" void
webKeepPrint( WebKeepConnect *p4, char *path, WebKeepPrinter *printer )
{
Error e[1];
ClientUserWK ui;
ClientApi client( &ui );
// Plug in API extentions: user's closure parameter and
// dispatch table.
ui.printer = printer;
if( p4->port ) client.SetPort( p4->port );
if( p4->user ) client.SetUser( p4->user );
if( p4->pass ) client.SetPassword( p4->pass );
if( p4->client ) client.SetClient( p4->client );
// Connect.
client.Init( e );
if( !e->Test() )
{
client.SetArgv( 1, &path );
client.Run( "print" );
client.Final( e );
}
if( e->Test() )
{
StrBuf buf;
e->Fmt( &buf );
(*printer->error)( printer, buf.Text() );
}
}