Notes

 view release on metacpan or  search on metacpan

Replication/Copy of 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( (DBHANDLE) LN_NVX(db), ri );
      LN_PUSH_NEW_OBJ( "Notes::Replication", db );
      LN_SET_IVX     ( ln_obj, (long) ri);
      LN_SET_NVX     ( ln_obj, (long)(DBHANDLE) LN_NVX(db));
      //LN_SET_OK      ( ln_obj );
      XSRETURN       ( 1 );


MODULE = Notes::Replication	 PACKAGE = Notes::Replication

void
DESTROY( repl )
      LN_Replication *   repl;
   PPCODE:
   	  Safefree( (DBREPLICAINFO *)LN_IVX( 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 = (DBREPLICAINFO *) LN_IVX( 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
       //{
		//   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 = (DBREPLICAINFO *) LN_IVX( 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((DBHANDLE) LN_NVX(repl), ri );
      //}
      XSRETURN_OK;


void
cutoff_interval_days( repl )
      LN_Replication * repl;
   PREINIT:
      DBREPLICAINFO  * ri;
   PPCODE:
      //if (LN_IS_OK(repl))
      //{
		  ri = (DBREPLICAINFO *) LN_IVX( repl );
		  XSRETURN_IV( (IV) ri->CutoffInterval );
	  //}
      //else
      //{
	  //	  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 = (DBREPLICAINFO *) LN_IVX( repl );
         ri->CutoffInterval = (WORD) ln_cutoff_interval_days;
         NSFDbReplicaInfoSet((DBHANDLE) LN_NVX(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 ((DBHANDLE) LN_NVX(repl), 0, &hReplHist, &dwNumEntries);
	  if (error)
	  {
	      //LN_SET_IVX(repl, error);
	      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)
  		{
  			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((DBHANDLE) LN_NVX(repl), 0);
      //}
      XSRETURN_OK;



( run in 0.549 second using v1.01-cache-2.11-cpan-5511b514fd6 )