[svn:dbd-oracle] r14876 - dbd-oracle/branches/FAN

[email protected] Fri, 27 May 2011 05:06:02 -0700 (PDT)
Newsgroups perl.dbd.oracle.changes
Message-ID <[email protected]>
Author: byterock
Date: Fri May 27 05:06:01 2011
New Revision: 14876

Modified:
   dbd-oracle/branches/FAN/oci8.c

Log:
Fist checking

Modified: dbd-oracle/branches/FAN/oci8.c
==============================================================================
--- dbd-oracle/branches/FAN/oci8.c	(original)
+++ dbd-oracle/branches/FAN/oci8.c	Fri May 27 05:06:01 2011
@@ -1276,6 +1276,78 @@
 
 }
 
+
+sb4
+ha_cbk(dvoid *ha_ctx, OCIEvent *eventhp){
+	dTHX;
+	OCIServer *srvhp;
+	OCIError *errhp;
+	sb4 retcode;
+	OraText *hostname;
+	OraText *dbname;
+	OraText *instname;
+	OraText *svcname;
+	OCIDate timestmp;
+	OCIEnv *envhp = (OCIEnv *)ha_ctx;
+	ub4 sizep;
+        if (dbd_verbose >= 5 ) {
+          PerlIO_printf(DBILOGFP,"HA event received.\n");
+        }
+	
+	if (OCIHandleAlloc( (dvoid *)envhp, (dvoid **)&errhp,(ub4) OCI_HTYPE_ERROR,(size_t) 0, (dvoid **) 0))
+		return;
+	
+	if (retcode = OCIAttrGet(eventhp, OCI_HTYPE_EVENT, (dvoid *)&srvhp,(ub4 *)0,OCI_ATTR_HA_SRVFIRST, errhp)){
+		checkerr (errhp, (sword)retcode);
+	}
+	else{
+		PerlIO_printf(DBILOGFP,"found first server handle.\n");
+		if (retcode = OCIAttrGet(srvhp, OCI_HTYPE_SERVER, (dvoid *)&instname,(ub4 *)&sizep,OCI_ATTR_INSTNAME, errhp)){
+			checkerr(errhp, (sword)retcode);
+		}
+		else{
+			 PerlIO_printf(DBILOGFP,"instance name is %s.\n", instname);
+		}
+	}
+
+	while(!retcode){
+		if (retcode = OCIAttrGet(eventhp, OCI_HTYPE_EVENT, (dvoid *)&srvhp,(ub4 *)0,OCI_ATTR_HA_SRVNEXT, errhp)){
+			checkerr (errhp, (sword)retcode);
+		}
+		else{
+			 PerlIO_printf(DBILOGFP,"found another server handle.\n");
+/*get associated instance name, */
+
+			if (retcode = OCIAttrGet(srvhp, OCI_HTYPE_SERVER, (dvoid *)&instname,(ub4 *)&sizep,OCI_ATTR_INSTNAME, errhp)){
+				checkerr(errhp, (sword)retcode);
+			}
+			else {
+				 PerlIO_printf(DBILOGFP,"instance name is %s.\n", instname);
+			}
+		}
+	}	
+
+	OCIHandleFree((dvoid *)errhp, OCI_HTYPE_ERROR);
+	 PerlIO_printf(DBILOGFP,"Finished event callback function.\n");
+}
+
+/*Registering HA callback function. */
+if (checkerr(errhp, OCIAttrSet(envhp, (ub4) OCI_HTYPE_ENV,
+(dvoid *)evtcallback_fn, (ub4)0,
+(ub4)OCI_ATTR_EVTCBK, errhp)))
+{
+printf("Failed to set register EVENT callback.\n");
+return EX_FAILURE;
+}
+if (checkerr(errhp, OCIAttrSet(envhp, (ub4) OCI_HTYPE_ENV,
+(dvoid *)envhp, (ub4)0,
+(ub4)OCI_ATTR_EVTCTX, errhp)))
+{
+printf("Failed to set register EVENT callback context.\n");
+return EX_FAILURE;
+}
+return EX_SUCCESS;
+}
 /* TAF or Trasarent Application Failoever callback
    Works like this.  The fuction below is registered on the server,
    when the server is set up to use it, when an exe is called (not sure about other server round trips)
@@ -4669,4 +4741,4 @@
 	}
 	imp_dbh->server_version = vernum;
 	return vernum;
-}
\ No newline at end of file
+}