Notes
view release on metacpan or search on metacpan
Replication/Replication.xs view on Meta::CPAN
#define BLOCK Perl_BLOCK
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "notesreplication.h"
MODULE = Notes::Replication PACKAGE = Notes::Database
PROTOTYPES: DISABLE
void
replication_info( db )
LN_Database * db;
PREINIT:
d_LN_XSVARS;
STATUS ln_rc;
DBREPLICAINFO * ri;
ALIAS:
ReplicationInfo = 0
PPCODE:
Newz(1, ri, 1, DBREPLICAINFO);
ln_rc = NSFDbReplicaInfoGet( LN_DB_HANDLE(NOTESDATABASE,db), ri );
LN_PUSH_NEW_OBJ( "Notes::Replication", db );
LN_INIT_OBJ_STRUCT(NOTESREPLICATION, ln_obj);
//printf("SETTING DBHANDLE = %ld\n", LN_DB_HANDLE(NOTESDATABASE,db));
LN_SET_DB_HANDLE(NOTESREPLICATION, ln_obj, LN_DB_HANDLE(NOTESDATABASE,db));
//printf("STORED DBHANDLE = %ld\n", LN_DB_HANDLE(NOTESREPLICATION,ln_obj));
//printf("SETTING DBREPLICAINFO = %ld\n", ri);
LN_SET_DB_REPL_INFO(NOTESREPLICATION, ln_obj, ri);
//printf("STORED DBREPLICAINFO = %ld\n", LN_DB_REPL_INFO(NOTESREPLICATION,ln_obj));
LN_SET_OK ( ln_obj );
XSRETURN ( 1 );
MODULE = Notes::Replication PACKAGE = Notes::Replication
void
DESTROY( repl )
LN_Replication * repl;
PPCODE:
Safefree( LN_DB_REPL_INFO(NOTESREPLICATION, repl) );
LN_FREE_OBJ_STRUCT(NOTESREPLICATION, repl);
//LN_SET_PARENT_IVX( repl, ln_rc );
XSRETURN( 0 );
void
is_browsable( repl )
LN_Replication * repl;
PREINIT:
int ln_query;
DBREPLICAINFO * ri;
ALIAS:
is_browsable = 0
is_catalogable = 1
is_replicating = 2
is_never_replicating = 3
is_receiving_deletions = 4
is_sending_deletions = 5
is_using_cutoff_interval = 6
is_running_scheduled_agents = 7
PPCODE:
if ( LN_IS_OK(repl) )
{
ri = LN_DB_REPL_INFO(NOTESREPLICATION, repl);
switch( ix )
{
case 0: ln_query = !(ri->Flags & REPLFLG_DO_NOT_BROWSE);
break;
case 1: ln_query = !(ri->Flags & REPLFLG_DO_NOT_CATALOG);
break;
break;
default: XSRETURN_NOT_OK;
break;
}
if (ln_query)
{
XSRETURN_YES;
}
else
{
XSRETURN_NO;
}
}
else
{
DEBUG(("Notes::Database object is not OK at line %d", __LINE__));
XSRETURN_NOT_OK;
}
void
set_browsable( repl )
LN_Replication * repl;
PREINIT:
DBREPLICAINFO * ri;
ALIAS:
set_browsable = 0
set_not_browsable = 1
set_catalogable = 2
set_not_catalogable = 3
disable_replication = 4
enable_replication = 5
never_replicate_again = 6
replicate_again = 7
receive_deletions = 8
do_not_receive_deletions = 9
send_deletions = 10
do_not_send_deletions = 11
keep_docs_not_in_cutoff_interval = 12
delete_docs_not_in_cutoff_interval = 13
run_scheduled_agents = 14
do_not_run_scheduled_agents = 15
PPCODE:
if ( LN_IS_OK(repl) )
{
ri = LN_DB_REPL_INFO(NOTESREPLICATION, repl);
switch( ix )
{
case 0: ri->Flags &= ~REPLFLG_DO_NOT_BROWSE;
break;
case 1: ri->Flags |= REPLFLG_DO_NOT_BROWSE;
break;
case 2: ri->Flags &= ~REPLFLG_DO_NOT_CATALOG;
break;
case 3: ri->Flags |= REPLFLG_DO_NOT_CATALOG;
break;
default: XSRETURN(0);
break;
}
NSFDbReplicaInfoSet(LN_DB_HANDLE(NOTESREPLICATION,repl), ri );
}
XSRETURN_OK;
void
cutoff_interval_days( repl )
LN_Replication * repl;
PREINIT:
DBREPLICAINFO * ri;
PPCODE:
if (LN_IS_OK(repl))
{
ri = LN_DB_REPL_INFO(NOTESREPLICATION, repl);
XSRETURN_IV( (IV) ri->CutoffInterval );
}
else
{
DEBUG(("Notes::Database object is not OK at line %d", __LINE__));
XSRETURN_NOT_OK;
}
void
set_cutoff_interval_days( repl, ln_cutoff_interval_days )
LN_Replication * repl;
IV ln_cutoff_interval_days;
PREINIT:
DBREPLICAINFO * ri;
PPCODE:
if ( LN_IS_OK(repl) )
{
ri = LN_DB_REPL_INFO(NOTESREPLICATION, repl);
ri->CutoffInterval = (WORD) ln_cutoff_interval_days;
NSFDbReplicaInfoSet(LN_DB_HANDLE(NOTESREPLICATION,repl), ri );
}
XSRETURN_OK;
void
gethistory( repl )
LN_Replication * repl;
PREINIT:
STATUS error = NOERROR; /* error code from API calls */
HANDLE hReplHist;
REPLHIST_SUMMARY ReplHist;
REPLHIST_SUMMARY * pReplHist;
char szTimedate[MAXALPHATIMEDATE + 1];
WORD wLen;
DWORD dwNumEntries, i;
char * pServerName; /* terminating NULL not included */
char szServerName[MAXUSERNAME + 1];
char * pFileName; /* includes terminating NULL */
char szDirection[10]; /* NEVER, SEND, RECEIVE */
PPCODE:
/* Get the Replication History Summary */
error = NSFDbGetReplHistorySummary (LN_DB_HANDLE(NOTESREPLICATION,repl),
0,
&hReplHist,
&dwNumEntries);
if (error)
{
LN_SET_IVX(repl, error);
DEBUG(("Notes::Replication object returning error %d at line %d", error, __LINE__));
XSRETURN_NOT_OK;
}
/* Obtain a pointer to the first member of the Replication History Summary array */
pReplHist = OSLock (REPLHIST_SUMMARY, hReplHist);
for (i = 0; i < dwNumEntries; i++)
{
ReplHist = pReplHist[i];
error = ConvertTIMEDATEToText (NULL, NULL, &(ReplHist.ReplicationTime),
szTimedate, MAXALPHATIMEDATE, &wLen);
if (error)
{
DEBUG(("Notes::Replication object returning error %d at line %d", error, __LINE__));
OSUnlock (hReplHist);
OSMemFree (hReplHist);
LN_SET_IVX(repl, error);
XSRETURN_NOT_OK;
}
szTimedate[wLen] = '\0';
if (ReplHist.Direction == DIRECTION_NEVER)
strcpy (szDirection, "NEVER");
else if (ReplHist.Direction == DIRECTION_SEND)
strcpy (szDirection, "SEND");
else if (ReplHist.Direction == DIRECTION_RECEIVE)
strcpy (szDirection, "RECEIVE");
else
strcpy (szDirection, "");
pServerName = NSFGetSummaryServerNamePtr (pReplHist, i);
strncpy (szServerName, pServerName, ReplHist.ServerNameLength);
szServerName[ReplHist.ServerNameLength] = '\0';
/* FileName will be NULL terminated */
pFileName = NSFGetSummaryFileNamePtr (pReplHist, i);
/* Push entry on the stack as a new SV */
XPUSHs( sv_2mortal( newSVpvf( "%s,%s,%s,%s",
szTimedate, szServerName, pFileName, szDirection)));
}
OSUnlock (hReplHist);
OSMemFree (hReplHist);
void
clearhistory( repl )
LN_Replication * repl;
PREINIT:
STATUS error = NOERROR;
PPCODE:
if ( LN_IS_OK(repl) )
{
error = NSFDbClearReplHistory(LN_DB_HANDLE(NOTESREPLICATION,repl), 0);
}
XSRETURN_OK;
( run in 0.644 second using v1.01-cache-2.11-cpan-5511b514fd6 )