/* This is part of the Aw:: Perl module.  A Perl interface to the ActiveWorks(tm) 
   libraries.  Copyright (C) 1999-2000 Daniel Yacob.

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public
   License as published by the Free Software Foundation; either
   version 2 of the License, or (at your option) any later version.

   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public
   License along with this library; if not, write to the Free
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

#ifdef __cplusplus
extern "C" {
#endif
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#ifdef __cplusplus
}
#endif


#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

#include <awadapter.h>
#include <aweb.h>
#include <adapter_log.h>

#if ( AW_VERSION_31 || AW_VERSION_40 )
#  include <adapter_sessions.h>
#endif /* ( AW_VERSION_31 || AW_VERSION_40 ) */

#include <awfilter.h>

/* Theses are required only for the constant routine */

#include "messages.h"
#include <awlicense.h>

/* includes for Aw.xs */

#include <awxs.h>
#include <awxs.m>
#include <awxs.def>

#include "Av_CharPtrPtr.h"
#include "exttypes.h"
#include "HashToEvent.h"
#include "EventToHash.h"
#include "TypeDefToHash.h"
#include "Util.h"



BrokerBoolean BrokerCallbackFunc ( BrokerClient cbClient, BrokerEvent cbEvent, void * vcb );


/*  gErr is an internal err tracker, its value is always the last BrokerError
 *  created.  Since we can not throw exceptions and not all routines will
 *  return errors on failure (creation of a new object returns undef on failure
 *  and sometimes (clients) we want to know why) we on occasion need this.
 *
 *  We can check values of the last error thru calls to Aw::Error methods
 *  without any arguements:
 *
 *   if ( Aw::Error::getCode == AW_ERROR_CLIENT_EXISTS )
 *
 */
BrokerError gErr = AW_NO_ERROR;
char * gErrMsg   = NULL;
int gErrCode     = 0;
awaBool gWarn    = awaFalse;



/*  gHandle is an auxilarly AdapterHandle pointer to simple ALIASed code
 *  where both xsAdapter and xsAdapterUtil datatypes get used.  Using the
 *  "global handle" should reduce the code size overall as numerous local
 *  handle pointers need not be created.
 *
 */
awAdapterHandle * gHandle = NULL;


static double
constant(name, arg)
char *name;
int arg;
{
    errno = 0;
    switch (*name) {
    case 'A':
	if (strEQ(name, "AW_AUTO_SIZE"))
#ifdef AW_AUTO_SIZE
	    return AW_AUTO_SIZE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ACK_NONE"))
#ifdef AW_ACK_NONE
	    return AW_ACK_NONE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ACK_AUTOMATIC"))
#ifdef AW_ACK_AUTOMATIC
	    return AW_ACK_AUTOMATIC;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ACK_THROUGH"))
#ifdef AW_ACK_THROUGH
	    return AW_ACK_THROUGH;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ACK_SELECTIVE"))
#ifdef AW_ACK_SELECTIVE
	    return AW_ACK_SELECTIVE;
#else
	    goto not_there;
#endif
    switch (name[3]) {
    case 'C':
	if (strEQ(name, "AW_CONNECT_STATE_CONNECTED"))
#ifdef AW_CONNECT_STATE_CONNECTED
	    return AW_CONNECT_STATE_CONNECTED;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_CONNECT_STATE_DISCONNECTED"))
#ifdef AW_CONNECT_STATE_DISCONNECTED
	    return AW_CONNECT_STATE_DISCONNECTED;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_CONNECT_STATE_RECONNECTED"))
#ifdef AW_CONNECT_STATE_RECONNECTED
	    return AW_CONNECT_STATE_RECONNECTED;
#else
	    goto not_there;
#endif
	break;
    case 'E':
	if (strEQ(name, "AW_ENCRYPT_LEVEL_NO_ENCRYPTION"))
#ifdef AW_ENCRYPT_LEVEL_NO_ENCRYPTION
	    return AW_ENCRYPT_LEVEL_NO_ENCRYPTION;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ENCRYPT_LEVEL_US_DOMESTIC"))
#ifdef AW_ENCRYPT_LEVEL_US_DOMESTIC
	    return AW_ENCRYPT_LEVEL_US_DOMESTIC;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ENCRYPT_LEVEL_US_EXPORT"))
#ifdef AW_ENCRYPT_LEVEL_US_EXPORT
	    return AW_ENCRYPT_LEVEL_US_EXPORT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ENTIRE_SEQUENCE"))
#ifdef AW_ENTIRE_SEQUENCE
	    return AW_ENTIRE_SEQUENCE;
#else
	    goto not_there;
#endif
    switch (name[9]) {
    case 'B':
	if (strEQ(name, "AW_ERROR_BAD_STATE"))
#ifdef AW_ERROR_BAD_STATE
	    return AW_ERROR_BAD_STATE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_BROKER_EXISTS"))
#ifdef AW_ERROR_BROKER_EXISTS
	    return AW_ERROR_BROKER_EXISTS;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_BROKER_FAILURE"))
#ifdef AW_ERROR_BROKER_FAILURE
	    return AW_ERROR_BROKER_FAILURE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_BROKER_NOT_RUNNING"))
#ifdef AW_ERROR_BROKER_NOT_RUNNING
	    return AW_ERROR_BROKER_NOT_RUNNING;
#else
	    goto not_there;
#endif
	break;
    case 'C':
	if (strEQ(name, "AW_ERROR_CLIENT_CONTENTION"))
#ifdef AW_ERROR_CLIENT_CONTENTION
	    return AW_ERROR_CLIENT_CONTENTION;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_CLIENT_EXISTS"))
#ifdef AW_ERROR_CLIENT_EXISTS
	    return AW_ERROR_CLIENT_EXISTS;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_CLIENT_GROUP_EXISTS"))
#ifdef AW_ERROR_CLIENT_GROUP_EXISTS
	    return AW_ERROR_CLIENT_GROUP_EXISTS;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_COMM_FAILURE"))
#ifdef AW_ERROR_COMM_FAILURE
	    return AW_ERROR_COMM_FAILURE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_CONNECTION_CLOSED"))
#ifdef AW_ERROR_CONNECTION_CLOSED
	    return AW_ERROR_CONNECTION_CLOSED;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_CORRUPT"))
#ifdef AW_ERROR_CORRUPT
	    return AW_ERROR_CORRUPT;
#else
	    goto not_there;
#endif
	break;
    case 'D':
	if (strEQ(name, "AW_ERROR_DEPENDENCY"))
#ifdef AW_ERROR_DEPENDENCY
	    return AW_ERROR_DEPENDENCY;
#else
	    goto not_there;
#endif
	break;
    case 'F':
	if (strEQ(name, "AW_ERROR_FIELD_NOT_FOUND"))
#ifdef AW_ERROR_FIELD_NOT_FOUND
	    return AW_ERROR_FIELD_NOT_FOUND;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_FIELD_TYPE_MISMATCH"))
#ifdef AW_ERROR_FIELD_TYPE_MISMATCH
	    return AW_ERROR_FIELD_TYPE_MISMATCH;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_FILE_NOT_FOUND"))
#ifdef AW_ERROR_FILE_NOT_FOUND
	    return AW_ERROR_FILE_NOT_FOUND;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_FILTER_PARSE"))
#ifdef AW_ERROR_FILTER_PARSE
	    return AW_ERROR_FILTER_PARSE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_FILTER_RUNTIME"))
#ifdef AW_ERROR_FILTER_RUNTIME
	    return AW_ERROR_FILTER_RUNTIME;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_FORMAT"))
#ifdef AW_ERROR_FORMAT
	    return AW_ERROR_FORMAT;
#else
	    goto not_there;
#endif
	break;
    case 'H':
	if (strEQ(name, "AW_ERROR_HOST_NOT_FOUND"))
#ifdef AW_ERROR_HOST_NOT_FOUND
	    return AW_ERROR_HOST_NOT_FOUND;
#else
	    goto not_there;
#endif
	break;
    case 'I':
	if (strEQ(name, "AW_ERROR_INCOMPATIBLE_VERSION"))
#ifdef AW_ERROR_INCOMPATIBLE_VERSION
	    return AW_ERROR_INCOMPATIBLE_VERSION;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INPUT_PARSE"))
#ifdef AW_ERROR_INPUT_PARSE
	    return AW_ERROR_INPUT_PARSE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INTERRUPTED"))
#ifdef AW_ERROR_INTERRUPTED
	    return AW_ERROR_INTERRUPTED;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_ACCESS_LIST"))
#ifdef AW_ERROR_INVALID_ACCESS_LIST
	    return AW_ERROR_INVALID_ACCESS_LIST;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_ACKNOWLEDGEMENT"))
#ifdef AW_ERROR_INVALID_ACKNOWLEDGEMENT
	    return AW_ERROR_INVALID_ACKNOWLEDGEMENT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_BROKER_NAME"))
#ifdef AW_ERROR_INVALID_BROKER_NAME
	    return AW_ERROR_INVALID_BROKER_NAME;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_CLIENT"))
#ifdef AW_ERROR_INVALID_CLIENT
	    return AW_ERROR_INVALID_CLIENT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_CLIENT_GROUP_NAME"))
#ifdef AW_ERROR_INVALID_CLIENT_GROUP_NAME
	    return AW_ERROR_INVALID_CLIENT_GROUP_NAME;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_CLIENT_ID"))
#ifdef AW_ERROR_INVALID_CLIENT_ID
	    return AW_ERROR_INVALID_CLIENT_ID;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_DESCRIPTOR"))
#ifdef AW_ERROR_INVALID_DESCRIPTOR
	    return AW_ERROR_INVALID_DESCRIPTOR;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_EVENT"))
#ifdef AW_ERROR_INVALID_EVENT
	    return AW_ERROR_INVALID_EVENT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_EVENT_TYPE_NAME"))
#ifdef AW_ERROR_INVALID_EVENT_TYPE_NAME
	    return AW_ERROR_INVALID_EVENT_TYPE_NAME;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_FIELD_NAME"))
#ifdef AW_ERROR_INVALID_FIELD_NAME
	    return AW_ERROR_INVALID_FIELD_NAME;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_FILTER"))
#ifdef AW_ERROR_INVALID_FILTER
	    return AW_ERROR_INVALID_FILTER;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_LICENSE"))
#ifdef AW_ERROR_INVALID_LICENSE
	    return AW_ERROR_INVALID_LICENSE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_LOG_CONFIG"))
#ifdef AW_ERROR_INVALID_LOG_CONFIG
	    return AW_ERROR_INVALID_LOG_CONFIG;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_NAME"))
#ifdef AW_ERROR_INVALID_NAME
	    return AW_ERROR_INVALID_NAME;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_PERMISSION"))
#ifdef AW_ERROR_INVALID_PERMISSION
	    return AW_ERROR_INVALID_PERMISSION;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_PLATFORM_KEY"))
#ifdef AW_ERROR_INVALID_PLATFORM_KEY
	    return AW_ERROR_INVALID_PLATFORM_KEY;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_PORT"))
#ifdef AW_ERROR_INVALID_PORT
	    return AW_ERROR_INVALID_PORT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_SUBSCRIPTION"))
#ifdef AW_ERROR_INVALID_SUBSCRIPTION
	    return AW_ERROR_INVALID_SUBSCRIPTION;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_TERRITORY_NAME"))
#ifdef AW_ERROR_INVALID_TERRITORY_NAME
	    return AW_ERROR_INVALID_TERRITORY_NAME;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_TYPE"))
#ifdef AW_ERROR_INVALID_TYPE
	    return AW_ERROR_INVALID_TYPE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_TYPECACHE"))
#ifdef AW_ERROR_INVALID_TYPECACHE
	    return AW_ERROR_INVALID_TYPECACHE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_INVALID_TYPEDEF"))
#ifdef AW_ERROR_INVALID_TYPEDEF
	    return AW_ERROR_INVALID_TYPEDEF;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_IN_TERRITORY"))
#ifdef AW_ERROR_IN_TERRITORY
	    return AW_ERROR_IN_TERRITORY;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_NOT_IMPLEMENTED"))
#ifdef AW_ERROR_NOT_IMPLEMENTED
	    return AW_ERROR_NOT_IMPLEMENTED;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_NOT_IN_TERRITORY"))
#ifdef AW_ERROR_NOT_IN_TERRITORY
	    return AW_ERROR_NOT_IN_TERRITORY;
#else
	    goto not_there;
#endif
	break;
    case 'N':
	if (strEQ(name, "AW_ERROR_NO_MEMORY"))
#ifdef AW_ERROR_NO_MEMORY
	    return AW_ERROR_NO_MEMORY;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_NO_PERMISSION"))
#ifdef AW_ERROR_NO_PERMISSION
	    return AW_ERROR_NO_PERMISSION;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_NULL_PARAM"))
#ifdef AW_ERROR_NULL_PARAM
	    return AW_ERROR_NULL_PARAM;
#else
	    goto not_there;
#endif
	break;
    case 'O':
	if (strEQ(name, "AW_ERROR_OUT_OF_RANGE"))
#ifdef AW_ERROR_OUT_OF_RANGE
	    return AW_ERROR_OUT_OF_RANGE;
#else
	    goto not_there;
#endif
	break;
    case 'P':
	if (strEQ(name, "AW_ERROR_PROTOCOL"))
#ifdef AW_ERROR_PROTOCOL
	    return AW_ERROR_PROTOCOL;
#else
	    goto not_there;
#endif
	break;
    case 'S':
	if (strEQ(name, "AW_ERROR_SECURITY"))
#ifdef AW_ERROR_SECURITY
	    return AW_ERROR_SECURITY;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_SUBSCRIPTION_EXISTS"))
#ifdef AW_ERROR_SUBSCRIPTION_EXISTS
	    return AW_ERROR_SUBSCRIPTION_EXISTS;
#else
	    goto not_there;
#endif
	break;
    case 'T':
	if (strEQ(name, "AW_ERROR_TIMEOUT"))
#ifdef AW_ERROR_TIMEOUT
	    return AW_ERROR_TIMEOUT;
#else
	    goto not_there;
#endif
	break;
    case 'U':
	if (strEQ(name, "AW_ERROR_UNKNOWN"))
#ifdef AW_ERROR_UNKNOWN
	    return AW_ERROR_UNKNOWN;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_UNKNOWN_BROKER_NAME"))
#ifdef AW_ERROR_UNKNOWN_BROKER_NAME
	    return AW_ERROR_UNKNOWN_BROKER_NAME;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_UNKNOWN_CLIENT_GROUP"))
#ifdef AW_ERROR_UNKNOWN_CLIENT_GROUP
	    return AW_ERROR_UNKNOWN_CLIENT_GROUP;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_UNKNOWN_CLIENT_ID"))
#ifdef AW_ERROR_UNKNOWN_CLIENT_ID
	    return AW_ERROR_UNKNOWN_CLIENT_ID;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_UNKNOWN_EVENT_TYPE"))
#ifdef AW_ERROR_UNKNOWN_EVENT_TYPE
	    return AW_ERROR_UNKNOWN_EVENT_TYPE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_UNKNOWN_INFOSET"))
#ifdef AW_ERROR_UNKNOWN_INFOSET
	    return AW_ERROR_UNKNOWN_INFOSET;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_UNKNOWN_KEY"))
#ifdef AW_ERROR_UNKNOWN_KEY
	    return AW_ERROR_UNKNOWN_KEY;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_UNKNOWN_NAME"))
#ifdef AW_ERROR_UNKNOWN_NAME
	    return AW_ERROR_UNKNOWN_NAME;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_UNKNOWN_SERVER"))
#ifdef AW_ERROR_UNKNOWN_SERVER
	    return AW_ERROR_UNKNOWN_SERVER;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_UNKNOWN_SESSION_ID"))
#ifdef AW_ERROR_UNKNOWN_SESSION_ID
	    return AW_ERROR_UNKNOWN_SESSION_ID;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_ERROR_UNKNOWN_TERRITORY"))
#ifdef AW_ERROR_UNKNOWN_TERRITORY
	    return AW_ERROR_UNKNOWN_TERRITORY;
#else
	    goto not_there;
#endif
	}
	break;
    case 'I':
	if (strEQ(name, "AW_INFINITE"))
#ifdef AW_INFINITE
	    return AW_INFINITE;
#else
	    goto not_there;
#endif
	break;
    case 'N':
	if (strEQ(name, "AW_NO_ERROR"))
#ifdef AW_NO_ERROR
	    return ((double)0x00000000);
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_NO_SHARE_LIMIT"))
#ifdef AW_NO_SHARE_LIMIT
	    return AW_NO_SHARE_LIMIT;
#else
	    goto not_there;
#endif
	break;
    case 'P':
	if (strEQ(name, "AW_PLATFORM_AIX"))
#ifdef AW_PLATFORM_AIX
	    return AW_PLATFORM_AIX;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_PLATFORM_ANY"))
#ifdef AW_PLATFORM_ANY
	    return AW_PLATFORM_ANY;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_PLATFORM_DEC"))
#ifdef AW_PLATFORM_DEC
	    return AW_PLATFORM_DEC;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_PLATFORM_HPUX"))
#ifdef AW_PLATFORM_HPUX
	    return AW_PLATFORM_HPUX;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_PLATFORM_IRIX"))
#ifdef AW_PLATFORM_IRIX
	    return AW_PLATFORM_IRIX;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_PLATFORM_SOLARIS"))
#ifdef AW_PLATFORM_SOLARIS
	    return AW_PLATFORM_SOLARIS;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_PLATFORM_WINDOWS"))
#ifdef AW_PLATFORM_WINDOWS
	    return AW_PLATFORM_WINDOWS;
#else
	    goto not_there;
#endif
	break;
    case 'R':
	if (strEQ(name, "AW_REPLY_FLAG_CONTINUE"))
#ifdef AW_REPLY_FLAG_CONTINUE
	    return AW_REPLY_FLAG_CONTINUE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_REPLY_FLAG_END"))
#ifdef AW_REPLY_FLAG_END
	    return AW_REPLY_FLAG_END;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_REPLY_FLAG_START"))
#ifdef AW_REPLY_FLAG_START
	    return AW_REPLY_FLAG_START;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_REPLY_FLAG_START_AND_END"))
#ifdef AW_REPLY_FLAG_START_AND_END
	    return AW_REPLY_FLAG_START_AND_END;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_RETRIEVE_ALL"))
#ifdef AW_RETRIEVE_ALL
	    return AW_RETRIEVE_ALL;
#else
	    goto not_there;
#endif
	break;
    case 'S':
/*
	if (strEQ(name, "AW_SHARED_ORDER_NONE"))
#ifdef AW_SHARED_ORDER_NONE
	    return AW_SHARED_ORDER_NONE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_SHARED_ORDER_BY_PUBLISHER"))
#ifdef AW_SHARED_ORDER_BY_PUBLISHER
	    return AW_SHARED_ORDER_BY_PUBLISHER;
#else
	    goto not_there;
#endif
*/
	if (strEQ(name, "AW_STORAGE_GUARANTEED"))
#ifdef AW_STORAGE_GUARANTEED
	    return AW_STORAGE_GUARANTEED;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_STORAGE_PERSISTENT"))
#ifdef AW_STORAGE_PERSISTENT
	    return AW_STORAGE_PERSISTENT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_STORAGE_VOLATILE"))
#ifdef AW_STORAGE_VOLATILE
	    return AW_STORAGE_VOLATILE;
#else
	    goto not_there;
#endif
	break;
    case 'T':
	if (strEQ(name, "AW_TRANSACTION_LEVEL_ANY"))
#ifdef AW_TRANSACTION_LEVEL_ANY
	    return AW_TRANSACTION_LEVEL_ANY;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_TRANSACTION_LEVEL_BASIC"))
#ifdef AW_TRANSACTION_LEVEL_BASIC
	    return AW_TRANSACTION_LEVEL_BASIC;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_TRANSACTION_LEVEL_CONVERSATIONAL"))
#ifdef AW_TRANSACTION_LEVEL_CONVERSATIONAL
	    return AW_TRANSACTION_LEVEL_CONVERSATIONAL;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_TRANSACTION_LEVEL_NONE"))
#ifdef AW_TRANSACTION_LEVEL_NONE
	    return AW_TRANSACTION_LEVEL_NONE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_TRANSACTION_LEVEL_PSEUDO"))
#ifdef AW_TRANSACTION_LEVEL_PSEUDO
	    return AW_TRANSACTION_LEVEL_PSEUDO;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_TRANSACTION_MODE_COMMIT"))
#ifdef AW_TRANSACTION_MODE_COMMIT
	    return AW_TRANSACTION_MODE_COMMIT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_TRANSACTION_MODE_ROLLBACK"))
#ifdef AW_TRANSACTION_MODE_ROLLBACK
	    return AW_TRANSACTION_MODE_ROLLBACK;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_TRANSACTION_MODE_SAVEPOINT"))
#ifdef AW_TRANSACTION_MODE_SAVEPOINT
	    return AW_TRANSACTION_MODE_SAVEPOINT;
#else
	    goto not_there;
#endif
	break;
    case 'U':
	break;
    case 'V':
	if (strEQ(name, "AW_VALIDATE_BAD_LICENSE"))
#ifdef AW_VALIDATE_BAD_LICENSE
	    return AW_VALIDATE_BAD_LICENSE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_VALIDATE_BAD_PLATFORM"))
#ifdef AW_VALIDATE_BAD_PLATFORM
	    return AW_VALIDATE_BAD_PLATFORM;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_VALIDATE_BAD_PRODUCT"))
#ifdef AW_VALIDATE_BAD_PRODUCT
	    return AW_VALIDATE_BAD_PRODUCT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_VALIDATE_BAD_VERSION"))
#ifdef AW_VALIDATE_BAD_VERSION
	    return AW_VALIDATE_BAD_VERSION;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_VALIDATE_EXPIRED"))
#ifdef AW_VALIDATE_EXPIRED
	    return AW_VALIDATE_EXPIRED;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_VALIDATE_OKAY"))
#ifdef AW_VALIDATE_OKAY
	    return AW_VALIDATE_OKAY;
#else
	    goto not_there;
#endif
	if (strEQ(name, "AW_VERSION"))
#ifdef AW_VERSION
	    return AW_VERSION;
#else
	    goto not_there;
#endif
	break;
    }
	break;
    case 'B':
	break;
    case 'C':
	if (strEQ(name, "CAT_ADAPTER"))
#ifdef CAT_ADAPTER
	    return CAT_ADAPTER;
#else
	    goto not_there;
#endif
	if (strEQ(name, "CAT_APPLICATION"))
#ifdef CAT_APPLICATION
	    return CAT_APPLICATION;
#else
	    goto not_there;
#endif
	if (strEQ(name, "CAT_BROKER"))
#ifdef CAT_BROKER
	    return CAT_BROKER;
#else
	    goto not_there;
#endif
	if (strEQ(name, "CAT_DEBUG"))
#ifdef CAT_DEBUG
	    return CAT_DEBUG;
#else
	    goto not_there;
#endif
	if (strEQ(name, "CAT_FILLER10"))
#ifdef CAT_FILLER10
	    return CAT_FILLER10;
#else
	    goto not_there;
#endif
	if (strEQ(name, "CAT_FILLER9"))
#ifdef CAT_FILLER9
	    return CAT_FILLER9;
#else
	    goto not_there;
#endif
	if (strEQ(name, "CAT_KERNEL"))
#ifdef CAT_KERNEL
	    return CAT_KERNEL;
#else
	    goto not_there;
#endif
	if (strEQ(name, "CAT_MONITOR"))
#ifdef CAT_MONITOR
	    return CAT_MONITOR;
#else
	    goto not_there;
#endif
	if (strEQ(name, "CAT_SYSTEM"))
#ifdef CAT_SYSTEM
	    return CAT_SYSTEM;
#else
	    goto not_there;
#endif
	if (strEQ(name, "CAT_TIMEOUT"))
#ifdef CAT_TIMEOUT
	    return CAT_TIMEOUT;
#else
	    goto not_there;
#endif
	break;
    case 'D':
	if (strEQ(name, "DEFAULT_TRANSACTION_TIMEOUT"))
#ifdef DEFAULT_TRANSACTION_TIMEOUT
	    return DEFAULT_TRANSACTION_TIMEOUT;
#else
	    goto not_there;
#endif
	break;
    case 'E':
	if (strEQ(name, "ERR_ADAPTER_SUBS"))
#ifdef ERR_ADAPTER_SUBS
	    return ERR_ADAPTER_SUBS;
#else
	    goto not_there;
#endif
	if (strEQ(name, "ERR_BAD_LICENSE"))
#ifdef ERR_BAD_LICENSE
	    return ERR_BAD_LICENSE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "ERR_CREATE_CLIENT"))
#ifdef ERR_CREATE_CLIENT
	    return ERR_CREATE_CLIENT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "ERR_GET_ADAPTER_INFO"))
#ifdef ERR_GET_ADAPTER_INFO
	    return ERR_GET_ADAPTER_INFO;
#else
	    goto not_there;
#endif
	if (strEQ(name, "ERR_GET_EVENTS"))
#ifdef ERR_GET_EVENTS
	    return ERR_GET_EVENTS;
#else
	    goto not_there;
#endif
	if (strEQ(name, "ERR_LICENSE_BAD_PLATFORM"))
#ifdef ERR_LICENSE_BAD_PLATFORM
	    return ERR_LICENSE_BAD_PLATFORM;
#else
	    goto not_there;
#endif
	if (strEQ(name, "ERR_LICENSE_BAD_PRODUCT"))
#ifdef ERR_LICENSE_BAD_PRODUCT
	    return ERR_LICENSE_BAD_PRODUCT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "ERR_LICENSE_BAD_VERSION"))
#ifdef ERR_LICENSE_BAD_VERSION
	    return ERR_LICENSE_BAD_VERSION;
#else
	    goto not_there;
#endif
	if (strEQ(name, "ERR_LICENSE_EXPIRED"))
#ifdef ERR_LICENSE_EXPIRED
	    return ERR_LICENSE_EXPIRED;
#else
	    goto not_there;
#endif
	if (strEQ(name, "ERR_LICENSE_WILL_EXPIRE"))
#ifdef ERR_LICENSE_WILL_EXPIRE
	    return ERR_LICENSE_WILL_EXPIRE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "ERR_PANIC"))
#ifdef ERR_PANIC
	    return ERR_PANIC;
#else
	    goto not_there;
#endif
	if (strEQ(name, "ERR_PUBLISH_ADAPTER_ERROR"))
#ifdef ERR_PUBLISH_ADAPTER_ERROR
	    return ERR_PUBLISH_ADAPTER_ERROR;
#else
	    goto not_there;
#endif
	if (strEQ(name, "ERR_PUBLISH_STATUS"))
#ifdef ERR_PUBLISH_STATUS
	    return ERR_PUBLISH_STATUS;
#else
	    goto not_there;
#endif
	if (strEQ(name, "ERR_SSL_DESCRIPTOR"))
#ifdef ERR_SSL_DESCRIPTOR
	    return ERR_SSL_DESCRIPTOR;
#else
	    goto not_there;
#endif
	if (strEQ(name, "ERR_SUBSCRIPTION_ERROR"))
#ifdef ERR_SUBSCRIPTION_ERROR
	    return ERR_SUBSCRIPTION_ERROR;
#else
	    goto not_there;
#endif
	break;
    case 'F':
	if (strEQ(name, "FIELD_TYPE_BOOLEAN"))
#ifdef FIELD_TYPE_BOOLEAN
	    return FIELD_TYPE_BOOLEAN;
#else
	    goto not_there;
#endif
	if (strEQ(name, "FIELD_TYPE_BYTE"))
#ifdef FIELD_TYPE_BYTE
	    return FIELD_TYPE_BYTE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "FIELD_TYPE_CHAR"))
#ifdef FIELD_TYPE_CHAR
	    return FIELD_TYPE_CHAR;
#else
	    goto not_there;
#endif
	if (strEQ(name, "FIELD_TYPE_DATE"))
#ifdef FIELD_TYPE_DATE
	    return FIELD_TYPE_DATE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "FIELD_TYPE_DOUBLE"))
#ifdef FIELD_TYPE_DOUBLE
	    return FIELD_TYPE_DOUBLE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "FIELD_TYPE_EVENT"))
#ifdef FIELD_TYPE_EVENT
	    return FIELD_TYPE_EVENT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "FIELD_TYPE_FLOAT"))
#ifdef FIELD_TYPE_FLOAT
	    return FIELD_TYPE_FLOAT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "FIELD_TYPE_INT"))
#ifdef FIELD_TYPE_INT
	    return FIELD_TYPE_INT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "FIELD_TYPE_LONG"))
#ifdef FIELD_TYPE_LONG
	    return FIELD_TYPE_LONG;
#else
	    goto not_there;
#endif
	if (strEQ(name, "FIELD_TYPE_SEQUENCE"))
#ifdef FIELD_TYPE_SEQUENCE
	    return FIELD_TYPE_SEQUENCE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "FIELD_TYPE_SHORT"))
#ifdef FIELD_TYPE_SHORT
	    return FIELD_TYPE_SHORT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "FIELD_TYPE_STRING"))
#ifdef FIELD_TYPE_STRING
	    return FIELD_TYPE_STRING;
#else
	    goto not_there;
#endif
	if (strEQ(name, "FIELD_TYPE_STRUCT"))
#ifdef FIELD_TYPE_STRUCT
	    return FIELD_TYPE_STRUCT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "FIELD_TYPE_UNICODE_CHAR"))
#ifdef FIELD_TYPE_UNICODE_CHAR
	    return FIELD_TYPE_UNICODE_CHAR;
#else
	    goto not_there;
#endif
	if (strEQ(name, "FIELD_TYPE_UNICODE_STRING"))
#ifdef FIELD_TYPE_UNICODE_STRING
	    return FIELD_TYPE_UNICODE_STRING;
#else
	    goto not_there;
#endif
	if (strEQ(name, "FIELD_TYPE_UNKNOWN"))
#ifdef FIELD_TYPE_UNKNOWN
	    return FIELD_TYPE_UNKNOWN;
#else
	    goto not_there;
#endif
	if (strEQ(name, "FORWARD_ERROR_REQUEST"))
#ifdef FORWARD_ERROR_REQUEST
	    return FORWARD_ERROR_REQUEST;
#else
	    goto not_there;
#endif
	break;
    case 'G':
	if (strEQ(name, "GENERIC_ALERT"))
#ifdef GENERIC_ALERT
	    return GENERIC_ALERT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "GENERIC_INFO"))
#ifdef GENERIC_INFO
	    return GENERIC_INFO;
#else
	    goto not_there;
#endif
	if (strEQ(name, "GENERIC_WARNING"))
#ifdef GENERIC_WARNING
	    return GENERIC_WARNING;
#else
	    goto not_there;
#endif
	break;
    case 'H':
	break;
    case 'I':
	if (strEQ(name, "INFO_ADD_NOTIFY_EVENT"))
#ifdef INFO_ADD_NOTIFY_EVENT
	    return INFO_ADD_NOTIFY_EVENT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "INFO_ADD_REQUEST_EVENT"))
#ifdef INFO_ADD_REQUEST_EVENT
	    return INFO_ADD_REQUEST_EVENT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "INFO_CLEANUP_EVENTTYPE"))
#ifdef INFO_CLEANUP_EVENTTYPE
	    return INFO_CLEANUP_EVENTTYPE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "INFO_FORWARD_REQUEST"))
#ifdef INFO_FORWARD_REQUEST
	    return INFO_FORWARD_REQUEST;
#else
	    goto not_there;
#endif
	if (strEQ(name, "INFO_PROCESS_PUBLICATION"))
#ifdef INFO_PROCESS_PUBLICATION
	    return INFO_PROCESS_PUBLICATION;
#else
	    goto not_there;
#endif
	if (strEQ(name, "INFO_RECEIVED_REQUEST"))
#ifdef INFO_RECEIVED_REQUEST
	    return INFO_RECEIVED_REQUEST;
#else
	    goto not_there;
#endif
	if (strEQ(name, "INFO_TEST_BROKER"))
#ifdef INFO_TEST_BROKER
	    return INFO_TEST_BROKER;
#else
	    goto not_there;
#endif
	break;
    case 'J':
	break;
    case 'K':
	break;
    case 'L':
	break;
    case 'M':
	if (strEQ(name, "MSG_CREATE_EVENT"))
#ifdef MSG_CREATE_EVENT
	    return MSG_CREATE_EVENT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_DELIVER_ERROR"))
#ifdef MSG_DELIVER_ERROR
	    return MSG_DELIVER_ERROR;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_DELIVER_REPLY_ERROR"))
#ifdef MSG_DELIVER_REPLY_ERROR
	    return MSG_DELIVER_REPLY_ERROR;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_DELIVER_STATUS"))
#ifdef MSG_DELIVER_STATUS
	    return MSG_DELIVER_STATUS;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_FIELD_SET_ERROR"))
#ifdef MSG_FIELD_SET_ERROR
	    return MSG_FIELD_SET_ERROR;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_FIELD_SET_NOT_SUPPORTED"))
#ifdef MSG_FIELD_SET_NOT_SUPPORTED
	    return MSG_FIELD_SET_NOT_SUPPORTED;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_FIELD_SET_NO_FORMAT"))
#ifdef MSG_FIELD_SET_NO_FORMAT
	    return MSG_FIELD_SET_NO_FORMAT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_FORMAT_ERROR"))
#ifdef MSG_FORMAT_ERROR
	    return MSG_FORMAT_ERROR;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_FORWARD_SET_FIELDS"))
#ifdef MSG_FORWARD_SET_FIELDS
	    return MSG_FORWARD_SET_FIELDS;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_FORWARD_TO_SESSION"))
#ifdef MSG_FORWARD_TO_SESSION
	    return MSG_FORWARD_TO_SESSION;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_GET_EVENT_FIELD"))
#ifdef MSG_GET_EVENT_FIELD
	    return MSG_GET_EVENT_FIELD;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_GET_FAMILY_NAMES"))
#ifdef MSG_GET_FAMILY_NAMES
	    return MSG_GET_FAMILY_NAMES;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_INFOSET_ENTRY_ERROR"))
#ifdef MSG_INFOSET_ENTRY_ERROR
	    return MSG_INFOSET_ENTRY_ERROR;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_INFOSET_ENTRY_MISSING"))
#ifdef MSG_INFOSET_ENTRY_MISSING
	    return MSG_INFOSET_ENTRY_MISSING;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_NOTIFICATION_NOT_SUPPORTED"))
#ifdef MSG_NOTIFICATION_NOT_SUPPORTED
	    return MSG_NOTIFICATION_NOT_SUPPORTED;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_NO_CAN_PUBLISH"))
#ifdef MSG_NO_CAN_PUBLISH
	    return MSG_NO_CAN_PUBLISH;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_NO_CAN_PUBLISH_REPLY"))
#ifdef MSG_NO_CAN_PUBLISH_REPLY
	    return MSG_NO_CAN_PUBLISH_REPLY;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_NO_CAN_SUBSCRIBE"))
#ifdef MSG_NO_CAN_SUBSCRIBE
	    return MSG_NO_CAN_SUBSCRIBE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_NO_CAN_SUBSCRIBE_REPLY"))
#ifdef MSG_NO_CAN_SUBSCRIBE_REPLY
	    return MSG_NO_CAN_SUBSCRIBE_REPLY;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_NO_REFRESH_FAMILY"))
#ifdef MSG_NO_REFRESH_FAMILY
	    return MSG_NO_REFRESH_FAMILY;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_NO_TRANS_ID"))
#ifdef MSG_NO_TRANS_ID
	    return MSG_NO_TRANS_ID;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_NO_TRANS_MODE"))
#ifdef MSG_NO_TRANS_MODE
	    return MSG_NO_TRANS_MODE;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_NO_TYPE_DEF"))
#ifdef MSG_NO_TYPE_DEF
	    return MSG_NO_TYPE_DEF;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_NO_TYPE_DEF_REPLY"))
#ifdef MSG_NO_TYPE_DEF_REPLY
	    return MSG_NO_TYPE_DEF_REPLY;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_PUBLISH_ERROR"))
#ifdef MSG_PUBLISH_ERROR
	    return MSG_PUBLISH_ERROR;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_PUBLISH_REPLY_ERROR"))
#ifdef MSG_PUBLISH_REPLY_ERROR
	    return MSG_PUBLISH_REPLY_ERROR;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_RETRIEVE_EVENT_TYPES"))
#ifdef MSG_RETRIEVE_EVENT_TYPES
	    return MSG_RETRIEVE_EVENT_TYPES;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_SET_EVENT_FIELD"))
#ifdef MSG_SET_EVENT_FIELD
	    return MSG_SET_EVENT_FIELD;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_SUBSCRIPTION_ERROR"))
#ifdef MSG_SUBSCRIPTION_ERROR
	    return MSG_SUBSCRIPTION_ERROR;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_TRANSACTION_COMMIT_MISSING"))
#ifdef MSG_TRANSACTION_COMMIT_MISSING
	    return MSG_TRANSACTION_COMMIT_MISSING;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_TRANSACTION_MODIFIED"))
#ifdef MSG_TRANSACTION_MODIFIED
	    return MSG_TRANSACTION_MODIFIED;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_TRANSACTION_NOACK"))
#ifdef MSG_TRANSACTION_NOACK
	    return MSG_TRANSACTION_NOACK;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_TRANSACTION_TIMEOUT"))
#ifdef MSG_TRANSACTION_TIMEOUT
	    return MSG_TRANSACTION_TIMEOUT;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_TRANS_LEVEL_MISMATCH"))
#ifdef MSG_TRANS_LEVEL_MISMATCH
	    return MSG_TRANS_LEVEL_MISMATCH;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_TRANS_MODE_NOT_SUPPORTED"))
#ifdef MSG_TRANS_MODE_NOT_SUPPORTED
	    return MSG_TRANS_MODE_NOT_SUPPORTED;
#else
	    goto not_there;
#endif
	if (strEQ(name, "MSG_TRANS_NOT_ACTIVE"))
#ifdef MSG_TRANS_NOT_ACTIVE
	    return MSG_TRANS_NOT_ACTIVE;
#else
	    goto not_there;
#endif
	break;
    case 'N':
	break;
    case 'O':
	break;
    case 'P':
	if (strEQ(name, "PLACE_HOLDER1"))
#ifdef PLACE_HOLDER1
	    return PLACE_HOLDER1;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER10"))
#ifdef PLACE_HOLDER10
	    return PLACE_HOLDER10;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER11"))
#ifdef PLACE_HOLDER11
	    return PLACE_HOLDER11;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER12"))
#ifdef PLACE_HOLDER12
	    return PLACE_HOLDER12;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER13"))
#ifdef PLACE_HOLDER13
	    return PLACE_HOLDER13;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER14"))
#ifdef PLACE_HOLDER14
	    return PLACE_HOLDER14;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER15"))
#ifdef PLACE_HOLDER15
	    return PLACE_HOLDER15;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER16"))
#ifdef PLACE_HOLDER16
	    return PLACE_HOLDER16;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER2"))
#ifdef PLACE_HOLDER2
	    return PLACE_HOLDER2;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER3"))
#ifdef PLACE_HOLDER3
	    return PLACE_HOLDER3;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER34"))
#ifdef PLACE_HOLDER34
	    return PLACE_HOLDER34;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER35"))
#ifdef PLACE_HOLDER35
	    return PLACE_HOLDER35;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER36"))
#ifdef PLACE_HOLDER36
	    return PLACE_HOLDER36;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER37"))
#ifdef PLACE_HOLDER37
	    return PLACE_HOLDER37;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER38"))
#ifdef PLACE_HOLDER38
	    return PLACE_HOLDER38;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER4"))
#ifdef PLACE_HOLDER4
	    return PLACE_HOLDER4;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER5"))
#ifdef PLACE_HOLDER5
	    return PLACE_HOLDER5;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER6"))
#ifdef PLACE_HOLDER6
	    return PLACE_HOLDER6;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER7"))
#ifdef PLACE_HOLDER7
	    return PLACE_HOLDER7;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER8"))
#ifdef PLACE_HOLDER8
	    return PLACE_HOLDER8;
#else
	    goto not_there;
#endif
	if (strEQ(name, "PLACE_HOLDER9"))
#ifdef PLACE_HOLDER9
	    return PLACE_HOLDER9;
#else
	    goto not_there;
#endif
	break;
    case 'Q':
	break;
    case 'R':
	break;
    case 'S':
	break;
    case 'T':
	break;
    case 'U':
	break;
    case 'V':
	break;
    case 'W':
	break;
    case 'X':
	break;
    case 'Y':
	break;
    case 'Z':
	break;
   }
    errno = EINVAL;
    return 0;

not_there:
    errno = ENOENT;
    return 0;
}


char **
unshiftAndAvCharPtrPtr ( AV * strings, char * element )
{
char ** returnString;
int i = 0;
SV ** sv;
char * string;


	int count       = av_len ( strings ) + 2;
	returnString    = (char **)safemalloc ( count * sizeof( char * ) );

	returnString[0] = strdup ( element );

	for ( i=1; i<count; i++ ) {
		sv = av_fetch ( strings, i-1, 0 );  /* non mortal sv, so no leak */
		string = (char *)SvPV(*sv, PL_na);
		returnString[i] = strdup ( string );
	}

	return ( returnString );

}



#ifdef  NO_STRDUP
char *
strdup ( char * source )
{
char * target;

	target = (char *)safemalloc ( sizeof(char) * ( strlen(source) + 1 ) );

	strcpy ( target, source );

	return ( target );
}
#endif /* NO_STRDUP */



awAdapterProperties *
awxsHashToProperties ( HV * hv )
{
awAdapterProperties * props = awNewAdapterProperties ();
char *key;
HE *entry;
SV *sv;
int i, n;


	hv_iterinit ( hv );
	n = HvKEYS( hv );

	for ( i=0; i<n; i++ ) {
		entry = hv_iternext ( hv );
		key   = HeKEY ( entry );
		sv    = HeVAL ( entry );
#if !( AW_VERSION_31 || AW_VERSION_40 )
		if ( !strcmp ( key, "adaptercount" )
		     || !strcmp ( key, "adapterId" )
		     || !strcmp ( key, "brokerCheckInterval" )
		   ) {
			awAdapterSetIntegerProperty (props, key, (int)SvIV ( sv ) );
		}
		else if ( !strcmp ( key, "eventlog" )
			  || !strcmp ( key, "info" )
			  // || !strcmp ( key, "debug" )
			  || !strcmp ( key, "log_printf" )
			  || !strcmp ( key, "quiet" )
			  || !strcmp ( key, "sslEncrypted" )
			  || !strcmp ( key, "warning" )

			) {
			awAdapterSetBooleanProperty (props, key, (BrokerBoolean)SvIV ( sv ) );
		}
		else {
			if ( !strcmp ( key, "clientId" ) )
				key[6] = 'i';
			else if ( !strcmp ( key, "clientGroup" ) )
				key[6] = 'g';
			awAdapterSetProperty (props, key, SvPV ( sv, PL_na ) );
		}
#else
		awAdapterSetProperty (props, key, SvPV ( sv, PL_na ) );
#endif /* AW_VERSION_30 */
	}

	return ( props );
}


/**
 *   Forget this for now, there doesn't appear  to be
 *   a function for returning property datatypes anyway
 *
HV *
awxsPropertiesToHash ( awAdapterProperties * props )
{
HV * hv = newHV();

	bValue = awGetBooleanProperty ( key );
	iValue = awGetIntegerProperty ( key );
	strValue = awGetProperty ( key );

	sv = boolSV ( ((BrokerBoolean *)value)[i] );
	sv = newSViv ( *(IV*)((int*)value+i) );
	sv = newSVpv ( (char*)value, 0 );

	hv_store ( hv, key, strlen ( key ), sv, 0 );

	return ( newRV_noinc((SV*) hv) );
}

*/

/******************************************************************************\
**
**			BEGIN OF CALLBACK FUNCTIONS
**
**  These functions will each call the Perl method of the "self" adapter.
**
\******************************************************************************/


SV * OneAdapterRef;
xsAdapter * OneAdapter;

SV * OneAdapterETRef;
xsAdapterEventType * OneAdapterET;


awaBool
setupEvent ( awAdapterHandle * handle, awaBool allAdapters, awaBool canSubscribe, awaBool canPublish )
{
dSP;
SV *edsv, *resv;
awaBool i;
xsAdapterEventType * eventDef;
xsBrokerEvent * requestEvent;


	if (! (OneAdapter->firstCB & AWXS_SETUPEVENT) ) {
		SV * sv;
		OneAdapter->firstCB |= AWXS_SETUPEVENT;
		ENTER;
		SAVETMPS;

		PUSHMARK(sp);
		XPUSHs(OneAdapterRef);
		XPUSHs(sv_2mortal(newSVpv("setupEvent", 10)));
		PUTBACK;

		perl_call_method( "can", G_SCALAR );

		SPAGAIN;
		PUTBACK;

		sv = POPs;
		if (! SvTRUE( sv ) ) {
			FREETMPS;
			LEAVE;
			return ( awaTrue );
		}
		else
			OneAdapter->callback |= AWXS_SETUPEVENT;

		FREETMPS;
		LEAVE;
	}
	else if (! (OneAdapter->callback & AWXS_SETUPEVENT) )
		return ( awaTrue );


	OneAdapter->handle = handle;


	eventDef = (xsAdapterEventType *)safemalloc ( sizeof(xsAdapterEventType) );
	if ( eventDef == NULL ) {
		setErrMsg ( &gErrMsg, 1, "unable to malloc new adapter event" );
#ifdef AWXS_WARNS
		if ( gWarn )
			warn ( gErrMsg );
#endif /* AWXS_WARNS */
 		return awaFalse;
	}
	/* initialize the error cleanly */
	eventDef->err    = AW_NO_ERROR;
	eventDef->errMsg = NULL;
	eventDef->Warn   = gWarn;

	eventDef->adapterET = handle->eventDef;
	edsv = sv_newmortal();
	sv_setref_pv( edsv, "Aw::EventType", (void*)eventDef );


	requestEvent = (xsBrokerEvent *)safemalloc ( sizeof(xsBrokerEvent) );
	if ( requestEvent == NULL ) {
		setErrMsg ( &gErrMsg, 1, "unable to malloc new adapter event" );
#ifdef AWXS_WARNS
		if ( gWarn )
			warn ( gErrMsg );
#endif /* AWXS_WARNS */
 		return awaFalse;
	}
	/* initialize the error cleanly */
	requestEvent->err    = AW_NO_ERROR;
	requestEvent->errMsg = NULL;
	requestEvent->Warn   = gWarn;

	requestEvent->event = handle->requestEvent;
	resv = sv_newmortal();
	sv_setref_pv( resv, "Aw::Event", (void*)requestEvent );


	PUSHMARK(sp);
	XPUSHs(OneAdapterRef);
	XPUSHs(resv);
	XPUSHs(edsv);
	XPUSHs(sv_2mortal(newSViv(allAdapters)));
	XPUSHs(sv_2mortal(newSViv(canSubscribe)));
	XPUSHs(sv_2mortal(newSViv(canPublish)));
	PUTBACK;

	/* printf ("Hello From setupEvent Callback\n"); */
	perl_call_method( "setupEvent", G_SCALAR );

	SPAGAIN;
	PUTBACK;

	i = POPi;

	FREETMPS;
	LEAVE;	

	OneAdapter->handle = NULL;

	return ( i );

}


BrokerBoolean
processRequest ( awAdapterHandle * handle )
{
dSP;
SV *edsv, *resv;
xsAdapterEventType * eventDef;
xsBrokerEvent * requestEvent;


	if (! (OneAdapter->firstCB & AWXS_PROCESSREQUEST) ) {
		SV * sv;
		OneAdapter->firstCB |= AWXS_PROCESSREQUEST;
		ENTER;
		SAVETMPS;

		PUSHMARK(sp);
		XPUSHs(OneAdapterRef);
		XPUSHs(sv_2mortal(newSVpv("processRequest", 14)));
		PUTBACK;

		perl_call_method( "can", G_SCALAR );

		SPAGAIN;
		PUTBACK;

		sv = POPs;
		if (! SvTRUE( sv ) ) {
			FREETMPS;
			LEAVE;
			return ( awaTrue );
		}
		else
			OneAdapter->callback |= AWXS_PROCESSREQUEST;

		FREETMPS;
		LEAVE;
	}
	else if (! (OneAdapter->callback & AWXS_PROCESSREQUEST) )
		return ( awaTrue );


	OneAdapter->handle = handle;


	eventDef = (xsAdapterEventType *)safemalloc ( sizeof(xsAdapterEventType) );
	if ( eventDef == NULL ) {
		setErrMsg ( &gErrMsg, 1, "unable to malloc new adapter event" );
#ifdef AWXS_WARNS
		if ( gWarn )
			warn ( gErrMsg );
#endif /* AWXS_WARNS */
 		return awaFalse;
	}
	/* initialize the error cleanly */
	eventDef->err    = AW_NO_ERROR;
	eventDef->errMsg = NULL;
	eventDef->Warn   = gWarn;

	eventDef->adapterET = handle->eventDef;
	edsv = sv_newmortal();
	sv_setref_pv( edsv, "Aw::EventType", (void*)eventDef );


	requestEvent = (xsBrokerEvent *)safemalloc ( sizeof(xsBrokerEvent) );
	if ( requestEvent == NULL ) {
		setErrMsg ( &gErrMsg, 1, "unable to malloc new adapter event" );
#ifdef AWXS_WARNS
		if ( gWarn )
			warn ( gErrMsg );
#endif /* AWXS_WARNS */
 		return awaFalse;
	}
	/* initialize the error cleanly */
	requestEvent->err    = AW_NO_ERROR;
	requestEvent->errMsg = NULL;
	requestEvent->Warn   = gWarn;

	requestEvent->event = handle->requestEvent;
	resv = sv_newmortal();
	sv_setref_pv( resv, "Aw::Event", (void*)requestEvent );


	PUSHMARK(sp);
	XPUSHs(OneAdapterRef);
	XPUSHs(resv);
	XPUSHs(edsv);
	PUTBACK;

	/* printf ("Hello From processRequest Callback\n"); */
	perl_call_method( "processRequest", G_SCALAR );

	
	SPAGAIN;
	PUTBACK;

	OneAdapter->handle  = NULL;
	eventDef->adapterET = NULL;
	requestEvent->event = NULL;

/*
 * seems to be a bad idea with Perl 5.005, check again with 5.004 
 * 
	if ( SvREFCNT ( resv ) )
		SvREFCNT_dec ( resv );
	if ( SvREFCNT ( edsv ) )
		SvREFCNT_dec ( edsv );
*/

	return ( POPi );

}


void
cleanupEventType ( awAdapterHandle * handle )
{
dSP;
SV *edsv, *resv;
xsAdapterEventType * eventDef;
xsBrokerEvent * requestEvent;


	if (! (OneAdapter->firstCB & AWXS_CLEANUPEVENTTYPE) ) {
		SV * sv;
		OneAdapter->firstCB |= AWXS_CLEANUPEVENTTYPE;
		ENTER;
		SAVETMPS;

		PUSHMARK(sp);
		XPUSHs(OneAdapterRef);
		XPUSHs(sv_2mortal(newSVpv("cleanupEventType", 16)));
		PUTBACK;

		perl_call_method( "can", G_SCALAR );

		SPAGAIN;
		PUTBACK;

		sv = POPs;
		if (! SvTRUE( sv ) ) {
			FREETMPS;
			LEAVE;
			return;
		}
		else
			OneAdapter->callback |= AWXS_CLEANUPEVENTTYPE;

		FREETMPS;
		LEAVE;
	}
	else if (! (OneAdapter->callback & AWXS_CLEANUPEVENTTYPE) )
		return;


	OneAdapter->handle = handle;

	eventDef = (xsAdapterEventType *)safemalloc ( sizeof(xsAdapterEventType) );
	if ( eventDef == NULL ) {
		setErrMsg ( &gErrMsg, 1, "unable to malloc new adapter event" );
#ifdef AWXS_WARNS
		if ( gWarn )
			warn ( gErrMsg );
#endif /* AWXS_WARNS */
 		return;
	}
	/* initialize the error cleanly */
	eventDef->err    = AW_NO_ERROR;
	eventDef->errMsg = NULL;
	eventDef->Warn   = gWarn;

	eventDef->adapterET = handle->eventDef;
	edsv = sv_newmortal();
	sv_setref_pv( edsv, "Aw::EventType", (void*)eventDef );


	requestEvent = (xsBrokerEvent *)safemalloc ( sizeof(xsBrokerEvent) );
	if ( requestEvent == NULL ) {
		setErrMsg ( &gErrMsg, 1, "unable to malloc new adapter event" );
#ifdef AWXS_WARNS
		if ( gWarn )
			warn ( gErrMsg );
#endif /* AWXS_WARNS */
 		return;
	}
	/* initialize the error cleanly */
	requestEvent->err    = AW_NO_ERROR;
	requestEvent->errMsg = NULL;
	requestEvent->Warn   = gWarn;

	requestEvent->event = handle->requestEvent;
	resv = sv_newmortal();
	sv_setref_pv( resv, "Aw::Event", (void*)requestEvent );

	PUSHMARK(sp);
	XPUSHs(OneAdapterRef);
	XPUSHs(resv);
	XPUSHs(edsv);
	PUTBACK;

	/* printf ("Hello From cleanupEventType Callback\n"); */
	perl_call_method( "cleanupEventType", G_VOID );

	SPAGAIN;
	PUTBACK;

	OneAdapter->handle = NULL;

}



void
beginSetup ( awAdapterHandle * handle )
{
dSP;


	if (! (OneAdapter->firstCB & AWXS_BEGINSETUP) ) {
		SV * sv;
		OneAdapter->firstCB |= AWXS_BEGINSETUP;
		ENTER;
		SAVETMPS;

		PUSHMARK(sp);
		XPUSHs(OneAdapterRef);
		XPUSHs(sv_2mortal(newSVpv("beginSetup", 10)));
		PUTBACK;

		perl_call_method( "can", G_SCALAR );

		SPAGAIN;
		PUTBACK;

		sv = POPs;
		if (! SvTRUE( sv ) ) {
			FREETMPS;
			LEAVE;
			return;
		}
		else
			OneAdapter->callback |= AWXS_BEGINSETUP;

		FREETMPS;
		LEAVE;
	}
	else if (! (OneAdapter->callback & AWXS_BEGINSETUP) )
		return;


	OneAdapter->handle = handle;

	PUSHMARK(sp);
	XPUSHs(OneAdapterRef);
	PUTBACK;

	/* printf ("Hello From beginSetup Callback\n"); */
	perl_call_method( "beginSetup", G_VOID );


	OneAdapter->handle = NULL;

}



void
endSetup ( awAdapterHandle * handle )
{
dSP;


	if (! (OneAdapter->firstCB & AWXS_ENDSETUP) ) {
		SV * sv;
		OneAdapter->firstCB |= AWXS_ENDSETUP;
		ENTER;
		SAVETMPS;

		PUSHMARK(sp);
		XPUSHs(OneAdapterRef);
		XPUSHs(sv_2mortal(newSVpv("endSetup", 8)));
		PUTBACK;

		perl_call_method( "can", G_SCALAR );

		SPAGAIN;
		PUTBACK;

		sv = POPs;
		if (! SvTRUE( sv ) ) {
			FREETMPS;
			LEAVE;
			return;
		}
		else
			OneAdapter->callback |= AWXS_ENDSETUP;

		FREETMPS;
		LEAVE;
	}
	else if (! (OneAdapter->callback & AWXS_ENDSETUP) )
		return;


	OneAdapter->handle = handle;

	PUSHMARK(sp);
	XPUSHs(OneAdapterRef);
	PUTBACK;

	/* printf ("Hello From endSetup Callback\n"); */
	perl_call_method( "endSetup", G_VOID );

	OneAdapter->handle = NULL;

}



awaBool
processPublication ( awAdapterHandle * handle )
{
dSP;
awaBool i;
SV * sv;
xsAdapterEventType * eventDef;


	if (! (OneAdapter->firstCB & AWXS_PROCESSPUBLICATION) ) {
		OneAdapter->firstCB |= AWXS_PROCESSPUBLICATION;
		ENTER;
		SAVETMPS;

		PUSHMARK(sp);
		XPUSHs(OneAdapterRef);
		XPUSHs(sv_2mortal(newSVpv("processPublication", 18)));
		PUTBACK;

		perl_call_method( "can", G_SCALAR );

		SPAGAIN;
		PUTBACK;

		sv = POPs;
		if (! SvTRUE( sv ) ) {
			FREETMPS;
			LEAVE;
			return ( awaTrue );
		}
		else
			OneAdapter->callback |= AWXS_PROCESSPUBLICATION;

		FREETMPS;
		LEAVE;
	}
	else if (! (OneAdapter->callback & AWXS_PROCESSPUBLICATION) )
		return ( awaTrue );


	OneAdapter->handle = handle; 

	eventDef = (xsAdapterEventType *)safemalloc ( sizeof(xsAdapterEventType) );
	if ( eventDef == NULL ) {
		setErrMsg ( &gErrMsg, 1, "unable to malloc new adapter event" );
 		return awaFalse;
	}
	/* initialize the error cleanly */
	eventDef->err    = AW_NO_ERROR;
	eventDef->errMsg = NULL;

	eventDef->adapterET = handle->eventDef;

	sv = sv_newmortal();
	sv_setref_pv( sv, "Aw::EventType", (void*)eventDef );


	PUSHMARK(sp);
	XPUSHs(OneAdapterRef);
	XPUSHs(sv);
	PUTBACK;

	/* printf ("Hello From processPublication Callback\n"); */
	i = perl_call_method ( "processPublication", G_SCALAR );

	SPAGAIN;
	PUTBACK;

	OneAdapter->handle  = NULL;
	eventDef->adapterET = NULL;

	if ( SvREFCNT ( sv ) )
		SvREFCNT_dec ( sv );

	return ( POPi );
}



awaBool
beginTransaction ( awAdapterHandle * handle )
{
dSP;
awaBool i;


	if (! (OneAdapter->firstCB & AWXS_BEGINTRANSACTION) ) {
		SV * sv;
		OneAdapter->firstCB |= AWXS_BEGINTRANSACTION;
		ENTER;
		SAVETMPS;

		PUSHMARK(sp);
		XPUSHs(OneAdapterRef);
		XPUSHs(sv_2mortal(newSVpv("beginTransaction", 16)));
		PUTBACK;

		perl_call_method( "can", G_SCALAR );

		SPAGAIN;
		PUTBACK;

		sv = POPs;
		if (! SvTRUE( sv ) ) {
			FREETMPS;
			LEAVE;
			return ( awaTrue );
		}
		else
			OneAdapter->callback |= AWXS_BEGINTRANSACTION;

		FREETMPS;
		LEAVE;
	}
	else if (! (OneAdapter->callback & AWXS_BEGINTRANSACTION) )
		return ( awaTrue );


	OneAdapter->handle = handle;


	ENTER;
	SAVETMPS;

	PUSHMARK(sp);
	XPUSHs(OneAdapterRef);
	if ( handle->transactionId )
		XPUSHs(sv_2mortal(newSVpv(handle->transactionId, 0)));
	else 
		XPUSHs( Nullsv );
		// XPUSHs( sv_2mortal( Nullsv ) );
	PUTBACK;

	/* printf ("Hello From beginTransaction Callback\n"); */
	perl_call_method( "beginTransaction", G_SCALAR );

	SPAGAIN;
	PUTBACK;

	i = (awaBool)POPi;

	FREETMPS;
	LEAVE;

	OneAdapter->handle = NULL;

	return ( i );

}



awaBool
endTransaction ( awAdapterHandle * handle, int commitMode )
{
dSP;
awaBool i;


	if (! (OneAdapter->firstCB & AWXS_ENDTRANSACTION) ) {
		SV * sv;
		OneAdapter->firstCB |= AWXS_ENDTRANSACTION;
		ENTER;
		SAVETMPS;

		PUSHMARK(sp);
		XPUSHs(OneAdapterRef);
		XPUSHs(sv_2mortal(newSVpv("endTransaction", 14)));
		PUTBACK;

		perl_call_method( "can", G_SCALAR );
		SPAGAIN;
		PUTBACK;

		sv = POPs;
		if (! SvTRUE( sv ) ) {
			FREETMPS;
			LEAVE;
			return ( awaTrue );
		}
		else
			OneAdapter->callback |= AWXS_ENDTRANSACTION;

		FREETMPS;
		LEAVE;
		/* printf ( "  SvTRUE endTransaction[%d]\n", OneAdapter->firstCB & AWXS_ENDTRANSACTION ); */
	}
	else if (! (OneAdapter->callback & AWXS_ENDTRANSACTION) )
		return ( awaTrue );


	OneAdapter->handle = handle;


	ENTER;
	SAVETMPS;

	PUSHMARK(sp);
	XPUSHs(OneAdapterRef);
	if ( handle->transactionId )
		XPUSHs(sv_2mortal(newSVpv(handle->transactionId, 0)));
	else 
		XPUSHs( Nullsv );
		// XPUSHs( sv_2mortal( Nullsv ) );
	XPUSHs(sv_2mortal(newSViv(commitMode)));
	PUTBACK;

	/* printf ("Hello From endTransaction Callback\n"); */
	perl_call_method( "endTransaction", G_SCALAR );

	SPAGAIN;
	PUTBACK;

	i = POPi;

	FREETMPS;
	LEAVE;

	OneAdapter->handle = NULL;

	return ( i );

}



void
userDataDelete ( void *userData )
{
dSP;


	if (! (OneAdapterET->callback & AWXS_CALLBACKTEST) ) {
		SV * sv;
		OneAdapterET->callback |= AWXS_CALLBACKTEST;
		ENTER;
		SAVETMPS;

		PUSHMARK(sp);
		XPUSHs(OneAdapterRef);
		XPUSHs(sv_2mortal(newSVpv("userDataDelete", 14)));
		PUTBACK;

		perl_call_method( "can", G_SCALAR );

		SPAGAIN;
		PUTBACK;

		sv = POPs;
		if (! SvTRUE( sv ) ) {
			FREETMPS;
			LEAVE;
			return;
		}
		else
			OneAdapterET->callback |= AWXS_USERDATADELETE;

		FREETMPS;
		LEAVE;
	}
	else if (! (OneAdapter->callback & AWXS_USERDATADELETE) )
		return;



	PUSHMARK(sp);
	/*
	 *  worry about this later when we have a real example of
	 *  "userData".  Presumably the userData pointer is going to
	 *  point to an HV.
	 *
	 *  XPUSHs(userData);
	 */
	XPUSHs(OneAdapterETRef);
	XPUSHs((SV*)userData);  /* assume were were passed an SV */
	PUTBACK;

	/* printf ("Hello From userDataDelete Callback\n"); */
	perl_call_method( "userDataDelete", G_VOID );

}


/*
 *  This could fail if the ->self reference was consumed by Perl's
 *  garbage collector before the callback is made.  Won't know till
 *  we try it...
 */
BrokerBoolean
BrokerCallbackFunc ( BrokerClient cbClient, BrokerEvent cbEvent, void * vcb )
{
dSP;
SV *esv, *csv;
xsCallBackStruct * cb;
xsBrokerEvent  * event;
xsBrokerClient * client;


	cb = (xsCallBackStruct *)vcb;


	event = (xsBrokerEvent *)safemalloc ( sizeof(xsBrokerEvent) );
	if ( event == NULL ) {
		setErrMsg ( &gErrMsg, 1, "unable to malloc new broker event" );
#ifdef AWXS_WARNS
		if ( gWarn )
			warn ( gErrMsg );
#endif /* AWXS_WARNS */
 		return awaFalse;
	}
	/* initialize the error cleanly */
	event->err    = AW_NO_ERROR;
	event->errMsg = NULL;
	event->Warn   = gWarn;

	event->event = cbEvent;
	esv = sv_newmortal();
	sv_setref_pv( esv, "Aw::Event", (void*)event );


	client = (xsBrokerClient *)safemalloc ( sizeof(xsBrokerClient) );
	if ( event == NULL ) {
		setErrMsg ( &gErrMsg, 1, "unable to malloc new broker client" );
#ifdef AWXS_WARNS
		if ( gWarn )
			warn ( gErrMsg );
#endif /* AWXS_WARNS */
 		return awaFalse;
	}
	/* initialize the error cleanly */
	client->err    = AW_NO_ERROR;
	client->errMsg = NULL;
	client->Warn   = gWarn;

	client->client = cbClient;
	csv = sv_newmortal();
	sv_setref_pv( csv, "Aw::Client", (void*)client );


	PUSHMARK(sp);
	XPUSHs( cb->self );
	XPUSHs( cb->data );
	XPUSHs( csv );
	XPUSHs( esv );
	PUTBACK;

	perl_call_method( cb->method, G_SCALAR );

	SPAGAIN;
	PUTBACK;

	return ( POPi );

}



void
BrokerConnectionCallbackFunc ( BrokerClient cbClient, int connect_status, void * vcb )
{
dSP;
SV *esv, *csv;
xsCallBackStruct * cb;
xsBrokerClient * client;


	cb = (xsCallBackStruct *)vcb;

	ENTER;
	SAVETMPS;

	PUSHMARK(sp);
	XPUSHs( cb->self );
	XPUSHs(sv_2mortal(newSViv(connect_status)));
	XPUSHs( cb->data );
	PUTBACK;

	/* Not checking method with "can", assume for now if method was registered that it exists */
	perl_call_method( cb->method, G_SCALAR );

	SPAGAIN;
	PUTBACK;

	FREETMPS;
	LEAVE;

}

/******************************************************************************\
**
**			END OF CALLBACK FUNCTIONS
**
\******************************************************************************/


/*
#=============================================================================*/

MODULE = Aw			PACKAGE = Aw

#===============================================================================


PROTOTYPES: DISABLE



BOOT:

	if ( (int)SvIV(perl_get_sv("Aw::SPAM", FALSE)) )
		printf ( "\nAw %s [%s] (c) <Yacob@wMUsers.Com>\n\n" ,
			 (char *)SvPV(perl_get_sv("Aw::VERSION", FALSE), PL_na),
			 (char *)SvPV(perl_get_sv("Aw::VERSION_NAME", FALSE), PL_na) );


double
constant ( name, arg )
	char *		name
	int		arg



int
getDiagnostics ( )

	CODE:
		RETVAL = awGetDiagnostics();

	OUTPUT:
	RETVAL



void
setDiagnostics ( diag )
	int diag

	CODE:
		awSetDiagnostics ( diag );



void
setWarnAll ( onOff )
	awaBool onOff

	CODE:
		gWarn = onOff;

void
showHash ( hash )
	HV* hash

	CODE:
		hashWalk (hash);

int
refcnt ( sv )

	CODE:
		RETVAL = SvREFCNT ( ST(0) );

	OUTPUT:
	RETVAL

void
free ( sv )

	CODE:
		//
		// decrement to 1 and not 0.  gc should kick in when we return
		// to script space.
		//
		while ( SvREFCNT ( ST(0) ) > 1 ) {
			SvREFCNT_dec ( ST(0) );
		}	



#===============================================================================

MODULE = Aw			PACKAGE = Aw::BaseClass

#===============================================================================

#===============================================================================
#  Aw::BaseClass
#      ::DESTROY
#      ::err   			ala Mysql::
#      ::errmsg			ala Mysql::
#      ::error
#      ::getErrCode
#      ::setErrMsg
#      ::getWarn
#      ::setWarn
#      ::hello
#      ::catch
#      ::throw
#      ::toString
#===============================================================================



void
DESTROY ( self )

	ALIAS:
		Aw::Adapter::DESTROY              =  1
		Aw::EventType::DESTROY            =  2
		Aw::Log::DESTROY                  =  3
		Aw::Util::DESTROY                 =  4
		Aw::Client::DESTROY               =  5
		Aw::ConnectionDescriptor::DESTROY =  6
		Aw::Date::DESTROY                 =  7
		Aw::Error::DESTROY                =  8
		Aw::Event::DESTROY                =  9
		Aw::Filter::DESTROY               = 10
		Aw::Format::DESTROY               = 11
		Aw::SSLCertificate::DESTROY       = 12
		Aw::Subscription::DESTROY         = 13
		Aw::TypeDef::DESTROY              = 14
		Aw::TypeDefCache::DESTROY         = 15
		Aw::License::DESTROY              = 16
		Aw::Replies::DESTROY              = 17

	CODE:
		switch ( ix ) 
		  {
			case  1: /* Adapter */
				{
				xsAdapter * self = AWXS_ADAPTER(0);
				awDeleteAdapter ( self->adapter );
#ifdef    AWXS_DEBUG
				warn ( "Freeing Aw::Adapter!" );
#endif /* AWXS_DEBUG */
				Safefree ( self );
				}
				break;

			case  2: /* AdapterET */
				/* awDeleteAdapterET ( self->adapterET );  DON'T DO THIS!! */
#ifdef    AWXS_DEBUG
				warn ( "Freeing Aw::EventType!" );
#endif /* AWXS_DEBUG */
				Safefree ( AWXS_ADAPTEREVENTTYPE(0) );
				break;

			case  3: /* Aw::Log */
#ifdef    AWXS_DEBUG
				warn ( "Freeing Aw::Log!" );
#endif /* AWXS_DEBUG */
				Safefree ( AWXS_ADAPTERLOG(0) );
				break;

			case  4: /* AdapterUtil */
#ifdef    AWXS_DEBUG
				warn ( "Freeing Aw::Util!\n" );
#endif /* AWXS_DEBUG */
				Safefree ( AWXS_ADAPTERUTIL(0) );
				break;

			case  5: /* Client */
				{
				xsBrokerClient * self = AWXS_BROKERCLIENT(0);
#ifdef    AWXS_DEBUG
				warn ( "Freeing Aw::Client!\n" );
#endif /* AWXS_DEBUG */
				awDestroyClient ( self->client );
				Safefree ( self );
				}
				break;

			case  6: /* ConnectionDescription */
				{
				xsBrokerConnectionDescriptor * self = AWXS_BROKERCONNECTIONDESC(0);
				awDeleteDescriptor ( self->desc );
#ifdef    AWXS_DEBUG
				warn ( "Freeing Aw::ConnectionDescriptor!" );
#endif /* AWXS_DEBUG */
				Safefree ( self );
				}
				break;

			case  7: /* Date */
#ifdef    AWXS_DEBUG
				warn ( "Freeing Aw::Date!" );
#endif /* AWXS_DEBUG */
				awDeleteDate ( AWXS_BROKERDATE(0) );
				break;

			case  8: /* Error */
				{
				xsBrokerError * self = AWXS_BROKERERROR(0);
				awDeleteError ( self->err );
#ifdef    AWXS_DEBUG
				warn ( "Freeing Aw::Error!" );
#endif /* AWXS_DEBUG */
				Safefree ( self );
				}
				break;

			case  9: /* Event */
				{
				xsBrokerEvent * self = AWXS_BROKEREVENT(0);
#ifdef    AWXS_DEBUG
				warn ( "Freeing Aw::Event!" );
#endif /* AWXS_DEBUG */
				if ( self->deleteOk )
					awDeleteEvent ( self->event );
				Safefree ( self );
				}
				break;

			case 10: /* Filter */
				{
				xsBrokerFilter * self = AWXS_BROKERFILTER(0);
				awDeleteFilter ( self->filter );
				Safefree ( self );
				}
				break;

			case 11: /* Format */
				{
				xsBrokerFormat * self = AWXS_BROKERFORMAT(0);
				awEventFormatFree ( self->tokens );
				Safefree ( self );
				}
				break;

			case 12: /* SSLCertificate */
				Safefree ( AWXS_BROKERSSLCERTIFICATE(0) );
				break;

			case 13: /* Subscription */
				Safefree ( AWXS_BROKERSUBSCRIPTION(0) );
				break;

			case 14: /* TypeDef */
#ifdef    AWXS_DEBUG
				warn ( "Freeing Aw::TypeDef!" );
#endif /* AWXS_DEBUG */
				Safefree ( AWXS_BROKERTYPEDEF(0) );
				break;

			case 15: /* TypeDefCache */
				Safefree ( AWXS_BROKERTYPEDEFCACHE(0) );
				break;

			case 16: /* License */
				Safefree ( AWXS_ADAPTERLICENSE(0) );
				break;

			case 17: /* Replies */
				Safefree ( AWXS_ADAPTERREPLIES(0) );
				break;

			default:
#ifdef    AWXS_WARNS
				if ( gWarn )
					warn ( "You need an Alias here: %i", ix );
#endif /* AWXS_WARNS */
				break;
		  }



awaBool
err ( ... )

	ALIAS:
		Aw::err                       =  0
		Aw::Adapter::err              =  1
		Aw::EventType::err            =  2
		Aw::Util::err                 =  3
		Aw::Client::err               =  4
		Aw::ConnectionDescriptor::err =  5
		Aw::Event::err                =  6
		Aw::Error::err                =  7
		Aw::Filter::err               =  8
		Aw::Format::err               =  9
		Aw::TypeDef::err              = 10
		Aw::TypeDefCache::err         = 11

	CODE:
		BrokerError err = NULL;


		switch ( ix ) 
		  {
			case 0:
				err = gErr;
				break;

			case 1:
				err = AWXS_ADAPTER(0)->err;
				break;

			case 2:
				err = AWXS_ADAPTEREVENTTYPE(0)->err;
				break;

			case 3:
				err = AWXS_ADAPTERUTIL(0)->err;
				break;

			case 4:
				err = AWXS_BROKERCLIENT(0)->err;
				break;

			case 5:
				err = AWXS_BROKERCONNECTIONDESC(0)->err;
				break;

			case 6:
				err = AWXS_BROKEREVENT(0)->err;
				break;

			case 7:
				err = AWXS_BROKERERROR(0)->err;
				break;

			case 8:
				err = AWXS_BROKERFILTER(0)->err;
				break;

			case 9:
				err = AWXS_BROKERFORMAT(0)->err;
				break;

			case 10:
				err = AWXS_BROKERTYPEDEF(0)->err;
				break;

			case 11:
				err = AWXS_BROKERTYPEDEFCACHE(0)->err;
				break;

			default:
#ifdef AWXS_WARNS
				if ( gWarn )
					warn ( "You need an Alias here: %i", ix );
#endif /* AWXS_WARNS */
				break;
		  }

		RETVAL = ( err != AW_NO_ERROR || gErrMsg ) ? awaTrue : awaFalse;

	OUTPUT:
	RETVAL



char *
errmsg ( ... )

	ALIAS:
		Aw::errmsg                          =  0
		Aw::Adapter::errmsg                 =  1
		Aw::EventType::errmsg               =  2
		Aw::Util::errmsg                    =  3
		Aw::Client::errmsg                  =  4
		Aw::ConnectionDescriptor::errmsg    =  5
		Aw::Event::errmsg                   =  6
		Aw::Error::errmsg                   =  7
		Aw::Filter::errmsg                  =  8
		Aw::Format::errmsg                  =  9
		Aw::TypeDef::errmsg                 = 10
		Aw::TypeDefCache::errmsg            = 11

		Aw::getErrMsg                       = 100
		Aw::Adapter::getErrMsg              = 101
		Aw::EventType::getErrMsg            = 102
		Aw::Util::getErrMsg                 = 103
		Aw::Client::getErrMsg               = 104
		Aw::ConnectionDescriptor::getErrMsg = 105
		Aw::Event::getErrMsg                = 106
		Aw::Error::getErrMsg                = 107
		Aw::Filter::getErrMsg               = 108
		Aw::Format::getErrMsg               = 109
		Aw::TypeDef::getErrMsg              = 110
		Aw::TypeDefCache::getErrMsg         = 111


	CODE:
		BrokerError err = AW_NO_ERROR;
		char * errMsg   = NULL;


		switch ( ix ) 
		  {
			case 0:
			case 100:
				err    = gErr;
				errMsg = gErrMsg;
				break;

			case 1:
			case 101:
				err    = AWXS_ADAPTER(0)->err;
				errMsg = AWXS_ADAPTER(0)->errMsg;
				break;

			case 2:
			case 102:
				err    = AWXS_ADAPTEREVENTTYPE(0)->err;
				errMsg = AWXS_ADAPTEREVENTTYPE(0)->errMsg;
				break;

			case 3:
			case 103:
				err    = AWXS_ADAPTERUTIL(0)->err;
				errMsg = AWXS_ADAPTERUTIL(0)->errMsg;
				break;

			case 4:
			case 104:
				err    = AWXS_BROKERCLIENT(0)->err;
				errMsg = AWXS_BROKERCLIENT(0)->errMsg;
				break;

			case 5:
			case 105:
				err    = AWXS_BROKERCONNECTIONDESC(0)->err;
				errMsg = AWXS_BROKERCONNECTIONDESC(0)->errMsg;
				break;

			case 6:
			case 106:
				err    = AWXS_BROKEREVENT(0)->err;
				errMsg = AWXS_BROKEREVENT(0)->errMsg;
				break;

			case 7:
			case 107:
				err    = AWXS_BROKERERROR(0)->err;
				errMsg = AWXS_BROKERERROR(0)->errMsg;
				break;

			case 8:
			case 108:
				err    = AWXS_BROKERFILTER(0)->err;
				errMsg = AWXS_BROKERFILTER(0)->errMsg;
				break;

			case 9:
			case 109:
				err    = AWXS_BROKERFORMAT(0)->err;
				errMsg = AWXS_BROKERFORMAT(0)->errMsg;
				break;

			case 10:
			case 110:
				err    = AWXS_BROKERTYPEDEF(0)->err;
				errMsg = AWXS_BROKERTYPEDEF(0)->errMsg;
				break;

			case 11:
			case 111:
				err    = AWXS_BROKERTYPEDEFCACHE(0)->err;
				errMsg = AWXS_BROKERTYPEDEFCACHE(0)->errMsg;
				break;

			default:
#ifdef AWXS_WARNS
				if ( gWarn )
					warn ( "You need an Alias here: %i", ix );
#endif /* AWXS_WARNS */
				break;
		  }


		/* if ( err == AW_NO_ERROR && errMsg ) */
		if ( errMsg )
			RETVAL = errMsg;
		else if ( err != AW_NO_ERROR )
			RETVAL = awErrorToCompleteString ( err );

		if ( RETVAL == NULL )
			XSRETURN_UNDEF;


	OUTPUT:
	RETVAL



void
setErrMsg ( self, newErrMsg )
	char * newErrMsg

	ALIAS:
		Aw::setErrMsg                       =  0
		Aw::Adapter::setErrMsg              =  1
		Aw::EventType::setErrMsg            =  2
		Aw::Util::setErrMsg                 =  3
		Aw::Client::setErrMsg               =  4
		Aw::ConnectionDescriptor::setErrMsg =  5
		Aw::Event::setErrMsg                =  6
		Aw::Error::setErrMsg                =  7
		Aw::Filter::setErrMsg               =  8
		Aw::Format::setErrMsg               =  9
		Aw::TypeDef::setErrMsg              = 10
		Aw::TypeDefCache::setErrMsg         = 11

	CODE:
		char ** errMsg;

		switch ( ix ) 
		  {
			case 0:
				errMsg =& gErrMsg;
				break;

			case 1:
				errMsg =& AWXS_ADAPTER(0)->errMsg;
				break;

			case 2:
				errMsg =& AWXS_ADAPTEREVENTTYPE(0)->errMsg;
				break;

			case 3:
				errMsg =& AWXS_ADAPTERUTIL(0)->errMsg;
				break;

			case 4:
				errMsg =& AWXS_BROKERCLIENT(0)->errMsg;
				break;

			case 5:
				errMsg =& AWXS_BROKERCONNECTIONDESC(0)->errMsg;
				break;

			case 6:
				errMsg =& AWXS_BROKEREVENT(0)->errMsg;
				break;

			case 7:
				errMsg =& AWXS_BROKERERROR(0)->errMsg;
				break;

			case 8:
				errMsg =& AWXS_BROKERFILTER(0)->errMsg;
				break;

			case 9:
				errMsg =& AWXS_BROKERFORMAT(0)->errMsg;
				break;

			case 10:
				errMsg =& AWXS_BROKERTYPEDEF(0)->errMsg;
				break;

			case 11:
				errMsg =& AWXS_BROKERTYPEDEFCACHE(0)->errMsg;
				break;

			default:
#ifdef AWXS_WARNS
				if ( gWarn )
					warn ( "You need an Alias here: %i", ix );
#endif /* AWXS_WARNS */
				break;
		  }

		if ( *errMsg )
			Safefree ( *errMsg );

		gErrMsg = *errMsg = strdup ( newErrMsg );



void
throw ( self, newErrCode )
	int newErrCode

	ALIAS:
		Aw::throw                       =  0
		Aw::Adapter::throw              =  1
		Aw::EventType::throw            =  2
		Aw::Util::throw                 =  3
		Aw::Client::throw               =  4
		Aw::ConnectionDescriptor::throw =  5
		Aw::Event::throw                =  6
		Aw::Error::throw                =  7
		Aw::Filter::throw               =  8
		Aw::Format::throw               =  9
		Aw::TypeDef::throw              = 10
		Aw::TypeDefCache::throw         = 11

	PREINIT:
		char * strErrCode;

	CODE:
		gErrCode = newErrCode;
		strErrCode = (char *)safemalloc ( 8 * sizeof (char) );
		sprintf ( strErrCode, "%i", gErrCode );
		sv_setpv ( perl_get_sv("@",0), strErrCode );
		Safefree ( strErrCode );



int
catch ( ... )

	ALIAS:
		Aw::catch                       =  0
		Aw::Adapter::catch              =  1
		Aw::EventType::catch            =  2
		Aw::Util::catch                 =  3
		Aw::Client::catch               =  4
		Aw::ConnectionDescriptor::catch =  5
		Aw::Event::catch                =  6
		Aw::Error::catch                =  7
		Aw::Filter::catch               =  8
		Aw::Format::catch               =  9
		Aw::TypeDef::catch              = 10
		Aw::TypeDefCache::catch         = 11

	CODE:
		if ( items == 1 || (items == 2 && !SvOK(ST(1)) ) ) {
			if ( gErrCode == (int)AW_NO_ERROR )
				XSRETURN_UNDEF;

			RETVAL = gErrCode;
			/*
			   insert here a switch to do awGetErrorCode ( self->err )
			   or make a $self->getErrorCode method that works on self->err
			*/
		}
		else if ( SvTYPE(ST(1)) == SVt_PV ) {
			char *	exception = (char *)SvPV(ST(1),PL_na);
			RETVAL = ( strstr (gErrMsg, exception) ) ? awaTrue : awaFalse;
		}
		else {
			int exception = (int)SvIV(ST(1));
			RETVAL = ( exception == gErrCode ) ? awaTrue : awaFalse;
		}


	OUTPUT:
	RETVAL



int
getErrCode ( ... )

	ALIAS:
		Aw::getErrCode                       =  0
		Aw::Adapter::getErrCode              =  1
		Aw::EventType::getErrCode            =  2
		Aw::Util::getErrCode                 =  3
		Aw::Client::getErrCode               =  4
		Aw::ConnectionDescriptor::getErrCode =  5
		Aw::Event::getErrCode                =  6
		Aw::Filter::getErrCode               =  7
		Aw::Format::getErrCode               =  8
		Aw::TypeDef::getErrCode              =  9
		Aw::TypeDefCache::getErrCode         = 10


	CODE:


		switch ( ix ) 
		  {
			case 0:
				RETVAL = awGetErrorCode ( gErr );
				break;

			case 1:
				RETVAL = awGetErrorCode ( AWXS_ADAPTER(0)->err );
				break;

			case 2:
				RETVAL = awGetErrorCode ( AWXS_ADAPTEREVENTTYPE(0)->err );
				break;

			case 3:
				RETVAL = awGetErrorCode ( AWXS_ADAPTERUTIL(0)->err );
				break;

			case 4:
				RETVAL = awGetErrorCode ( AWXS_BROKERCLIENT(0)->err );
				break;

			case 5:
				RETVAL = awGetErrorCode ( AWXS_BROKERCONNECTIONDESC(0)->err );
				break;

			case 6:
				RETVAL = awGetErrorCode ( AWXS_BROKEREVENT(0)->err );
				break;

			case 7:
				RETVAL = awGetErrorCode ( AWXS_BROKERFILTER(0)->err );
				break;

			case 8:
				RETVAL = awGetErrorCode ( AWXS_BROKERFORMAT(0)->err );
				break;

			case 9:
				RETVAL = awGetErrorCode ( AWXS_BROKERTYPEDEF(0)->err );
				break;

			case 10:
				RETVAL = awGetErrorCode ( AWXS_BROKERTYPEDEFCACHE(0)->err );
				break;

			default:
#ifdef AWXS_WARNS
				if ( gWarn )
					warn ( "You need an Alias here: %i", ix );
#endif /* AWXS_WARNS */
				break;
		  }


	OUTPUT:
	RETVAL



Aw::Error
error ( ... )

	ALIAS:
		Aw::error                       =  0
		Aw::Adapter::error              =  1
		Aw::EventType::error            =  2
		Aw::Util::error                 =  3
		Aw::Client::error               =  4
		Aw::ConnectionDescriptor::error =  5
		Aw::Event::error                =  6
		Aw::Filter::error               =  7
		Aw::Format::error               =  8
		Aw::TypeDef::error              =  9
		Aw::TypeDefCache::error         = 10

	PREINIT:
		char CLASS[] = "Aw::Error";

	CODE:
		RETVAL = (xsBrokerError *)safemalloc ( sizeof(xsBrokerError) );
		if ( RETVAL == NULL ) {
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( "unable to malloc new error" );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}


		switch ( ix ) 
		  {
			case 0:
				RETVAL->err = gErr;
				break;

			case 1:
				RETVAL->err = AWXS_ADAPTER(0)->err;
				break;

			case 2:
				RETVAL->err = AWXS_ADAPTEREVENTTYPE(0)->err;
				break;

			case 3:
				RETVAL->err = AWXS_ADAPTERUTIL(0)->err;
				break;

			case 4:
				RETVAL->err = AWXS_BROKERCLIENT(0)->err;
				break;

			case 5:
				RETVAL->err = AWXS_BROKERCONNECTIONDESC(0)->err;
				break;

			case 6:
				RETVAL->err = AWXS_BROKEREVENT(0)->err;
				break;

			case 7:
				RETVAL->err = AWXS_BROKERFILTER(0)->err;
				break;

			case 8:
				RETVAL->err = AWXS_BROKERFORMAT(0)->err;
				break;

			case 9:
				RETVAL->err = AWXS_BROKERTYPEDEF(0)->err;
				break;

			case 10:
				RETVAL->err = AWXS_BROKERTYPEDEFCACHE(0)->err;
				break;

			default:
#ifdef AWXS_WARNS
				if ( gWarn )
					warn ( "You need an Alias here: %i", ix );
#endif /* AWXS_WARNS */
				break;
		  }

	OUTPUT:
	RETVAL



int
getWarn ( self )

	ALIAS:
		Aw::getWarn                       =  0
		Aw::Adapter::getWarn              =  1
		Aw::EventType::getWarn            =  2
		Aw::Util::getWarn                 =  3
		Aw::Client::getWarn               =  4
		Aw::ConnectionDescriptor::getWarn =  5
		Aw::Event::getWarn                =  6
		Aw::Error::getWarn                =  7
		Aw::Filter::getWarn               =  8
		Aw::Format::getWarn               =  9
		Aw::TypeDef::getWarn              = 10
		Aw::TypeDefCache::getWarn         = 11

	CODE:
		switch ( ix ) 
		  {
			case 0:
				RETVAL = (int)gWarn;
				break;

			case 1:
				RETVAL = (int)AWXS_ADAPTER(0)->Warn;
				break;

			case 2:
				RETVAL = (int)AWXS_ADAPTEREVENTTYPE(0)->Warn;
				break;

			case 3:
				RETVAL = (int)AWXS_ADAPTERUTIL(0)->Warn;
				break;

			case 4:
				RETVAL = (int)AWXS_BROKERCLIENT(0)->Warn;
				break;

			case 5:
				RETVAL = (int)AWXS_BROKERCONNECTIONDESC(0)->Warn;
				break;

			case 6:
				RETVAL = (int)AWXS_BROKEREVENT(0)->Warn;
				break;

			case 7:
				RETVAL = (int)AWXS_BROKERERROR(0)->Warn;
				break;

			case 8:
				RETVAL = (int)AWXS_BROKERFILTER(0)->Warn;
				break;

			case 9:
				RETVAL = (int)AWXS_BROKERFORMAT(0)->Warn;
				break;

			case 10:
				RETVAL = (int)AWXS_BROKERTYPEDEF(0)->Warn;
				break;

			case 11:
				RETVAL = (int)AWXS_BROKERTYPEDEFCACHE(0)->Warn;
				break;

			default:
#ifdef AWXS_WARNS
				if ( gWarn )
					warn ( "You need an Alias here: %i", ix );
#endif /* AWXS_WARNS */
				break;
		  }

	OUTPUT:
	RETVAL



void
setWarn ( self, level )
	int level

	ALIAS:
		Aw::setWarn                       =  0
		Aw::Adapter::setWarn              =  1
		Aw::EventType::setWarn            =  2
		Aw::Util::setWarn                 =  3
		Aw::Client::setWarn               =  4
		Aw::ConnectionDescriptor::setWarn =  5
		Aw::Event::setWarn                =  6
		Aw::Error::setWarn                =  7
		Aw::Filter::setWarn               =  8
		Aw::Format::setWarn               =  9
		Aw::TypeDef::setWarn              = 10
		Aw::TypeDefCache::setWarn         = 11

	CODE:
		switch ( ix ) 
		  {
			case 0:
				gWarn = level;
				break;

			case 1:
				AWXS_ADAPTER(0)->Warn = level;
				break;

			case 2:
				AWXS_ADAPTEREVENTTYPE(0)->Warn = level;
				break;

			case 3:
				AWXS_ADAPTERUTIL(0)->Warn = level;
				break;

			case 4:
				AWXS_BROKERCLIENT(0)->Warn = level;
				break;

			case 5:
				AWXS_BROKERCONNECTIONDESC(0)->Warn = level;
				break;

			case 6:
				AWXS_BROKEREVENT(0)->Warn = level;
				break;

			case 7:
				AWXS_BROKERERROR(0)->Warn = level;
				break;

			case 8:
				AWXS_BROKERFILTER(0)->Warn = level;
				break;

			case 9:
				AWXS_BROKERFORMAT(0)->Warn = level;
				break;

			case 10:
				AWXS_BROKERTYPEDEF(0)->Warn = level;
				break;

			case 11:
				AWXS_BROKERTYPEDEFCACHE(0)->Warn = level;
				break;

			default:
#ifdef AWXS_WARNS
				if ( gWarn )
					warn ( "You need an Alias here: %i", ix );
#endif /* AWXS_WARNS */
				break;
		  }



void
warn ( self, ... )

	ALIAS:
		Aw::warn                       =  0
		Aw::Adapter::warn              =  1
		Aw::EventType::warn            =  2
		Aw::Util::warn                 =  3
		Aw::Client::warn               =  4
		Aw::ConnectionDescriptor::warn =  5
		Aw::Event::warn                =  6
		Aw::Error::warn                =  7
		Aw::Filter::warn               =  8
		Aw::Format::warn               =  9
		Aw::TypeDef::warn              = 10
		Aw::TypeDefCache::warn         = 11

	CODE:
		BrokerError err = NULL;
		char * errMsg   = NULL;
		char Warn;


		switch ( ix ) 
		  {
			case 0:
				err    = gErr;
				errMsg = gErrMsg;
				Warn   = gWarn;
				break;

			case 1:
				err    = AWXS_ADAPTER(0)->err;
				errMsg = AWXS_ADAPTER(0)->errMsg;
				Warn   = AWXS_ADAPTER(0)->Warn;
				break;

			case 2:
				err    = AWXS_ADAPTEREVENTTYPE(0)->err;
				errMsg = AWXS_ADAPTEREVENTTYPE(0)->errMsg;
				Warn   = AWXS_ADAPTEREVENTTYPE(0)->Warn;
				break;

			case 3:
				err    = AWXS_ADAPTERUTIL(0)->err;
				errMsg = AWXS_ADAPTERUTIL(0)->errMsg;
				Warn   = AWXS_ADAPTERUTIL(0)->Warn;
				break;

			case 4:
				err    = AWXS_BROKERCLIENT(0)->err;
				errMsg = AWXS_BROKERCLIENT(0)->errMsg;
				Warn   = AWXS_BROKERCLIENT(0)->Warn;
				break;

			case 5:
				err    = AWXS_BROKERCONNECTIONDESC(0)->err;
				errMsg = AWXS_BROKERCONNECTIONDESC(0)->errMsg;
				Warn   = AWXS_BROKERCONNECTIONDESC(0)->Warn;
				break;

			case 6:
				err    = AWXS_BROKEREVENT(0)->err;
				errMsg = AWXS_BROKEREVENT(0)->errMsg;
				Warn   = AWXS_BROKEREVENT(0)->Warn;
				break;

			case 7:
				err    = AWXS_BROKERERROR(0)->err;
				errMsg = AWXS_BROKERERROR(0)->errMsg;
				Warn   = AWXS_BROKERERROR(0)->Warn;
				break;

			case 8:
				err    = AWXS_BROKERFILTER(0)->err;
				errMsg = AWXS_BROKERFILTER(0)->errMsg;
				Warn   = AWXS_BROKERFILTER(0)->Warn;
				break;

			case 9:
				err    = AWXS_BROKERFORMAT(0)->err;
				errMsg = AWXS_BROKERFORMAT(0)->errMsg;
				Warn   = AWXS_BROKERFORMAT(0)->Warn;
				break;

			case 10:
				err    = AWXS_BROKERTYPEDEF(0)->err;
				errMsg = AWXS_BROKERTYPEDEF(0)->errMsg;
				Warn   = AWXS_BROKERTYPEDEF(0)->Warn;
				break;

			case 11:
				err    = AWXS_BROKERTYPEDEFCACHE(0)->err;
				errMsg = AWXS_BROKERTYPEDEFCACHE(0)->errMsg;
				Warn   = AWXS_BROKERTYPEDEFCACHE(0)->Warn;
				break;

			default:
#ifdef AWXS_WARNS
				if ( gWarn )
					warn ( "You need an Alias here: %i", ix );
#endif /* AWXS_WARNS */
				break;
		  }


		/* if we are passed a warn, it over rides the pre-set value */
		if ( ix == 0 && items == 1 )
			Warn = (int)SvIV( ST(0) );
		else if ( items == 2 )
			Warn = (int)SvIV( ST(1) );


		if ( Warn ) {
			/* our own internal err message over rides Aw error messages */
			if ( errMsg )
				warn ( errMsg );
			else if (Warn == 1 && err != AW_NO_ERROR )
				errMsg = awErrorToString ( err );          /* hopefully NULL if AW_NO_ERROR */
			else if (Warn == 2 && err != AW_NO_ERROR )
				errMsg = awErrorToCompleteString ( err );  /* hopefully NULL if AW_NO_ERROR */

			if ( errMsg )
				warn ( errMsg ); 
		}




char *
hello ( self )

	ALIAS:
		Aw::Adapter::hello              =  1
		Aw::EventType::hello            =  2
		Aw::Log::hello                  =  3
		Aw::Util::hello                 =  4
		Aw::Client::hello               =  5
		Aw::ConnectionDescriptor::hello =  6
		Aw::Date::hello                 =  7
		Aw::Event::hello                =  8
		Aw::Error::hello                =  9
		Aw::Filter::hello               = 10
		Aw::Format::hello               = 11
		Aw::Replies::hello              = 12
		Aw::SSLCertificate::hello       = 13
		Aw::Subscription::hello         = 14
		Aw::TypeDef::hello              = 15
		Aw::TypeDefCache::hello         = 16

	CODE:
		RETVAL = strdup ( "  hello" );

	OUTPUT:
	RETVAL



char *
toString ( ... )

	ALIAS:
		Aw::Client::toString               = 1
		Aw::ConnectionDescriptor::toString = 2
		Aw::Date::toString                 = 3
		Aw::Error::toString                = 4
		Aw::Event::toString                = 5
		Aw::Filter::toString               = 6
		Aw::SSLCertifiate::toString        = 7
		Aw::TypeDef::toString              = 8

	CODE:
		/*  note, we haven't cleared the error here */

		switch ( ix ) 
		  {
			case 1:
				RETVAL = awClientToString ( AWXS_BROKERCLIENT(0)->client );
				break;

			case 2:
				RETVAL = awDescriptorToString ( AWXS_BROKERCONNECTIONDESC(0)->desc );
				break;

			case 3:
				RETVAL = awDateToString ( AWXS_BROKERDATE(0) );
				break;

			case 4:
				RETVAL = (items)
				       ? awErrorToString ( AWXS_BROKERERROR(0)->err )
				       : awErrorToString ( gErr )
				       ;
				break;

			case 5:
				RETVAL = awEventToString ( AWXS_BROKEREVENT(0)->event );
				break;

			case 6:
				RETVAL = awFilterToString ( AWXS_BROKERFILTER(0)->filter );
				break;

			case 7:
				RETVAL = (items)
				       ? awSSLCertificateToIndentedString ( AWXS_BROKERSSLCERTIFICATE(0), (int)SvIV (ST(1)) )
				       : awSSLCertificateToString ( AWXS_BROKERSSLCERTIFICATE(0) )
				       ;
				break;

			case 8:
				RETVAL = awTypeDefToString ( AWXS_BROKERTYPEDEF(0)->type_def );
				break;

			default:
#ifdef AWXS_WARNS
				if ( gWarn )
					warn ( "You need an Alias here: %i", ix );
#endif /* AWXS_WARNS */
				break;
		  }

		if ( RETVAL == NULL )
			XSRETURN_UNDEF;

	OUTPUT:
	RETVAL



#===============================================================================

MODULE = Aw			PACKAGE = Aw::Adapter

#===============================================================================

#===============================================================================
#  Aw::Adapter
#    ::new
#    ::DESTROY-A
#
#    ::addEvent			Java CADK 7-14
#    ::connectTest			Java CADK 7-16
#    ::checkPublication		Java CADK 7-16
#    ::createClient			Java CADK 7-17
#    ::deliverErrorEvent		Java CADK 7-18
#    ::getAdapterEventName-A		Java CADK 7-19
#    ::getAdapterInfo		Java CADK 7-19
#    ::getAdapterType		Java CADK 7-20
#    ::getAdapterVersion-A		   C CADK
#    ::getAdminClient		Java CADK 7-20
#    ::getBroker-A			Java CADK 7-20
#    ::getBrokerClient-A		Java CADK 7-20
#    ::getBrokerHost-A		Java CADK 7-20
#    ::getBrokerName-A		Java CADK 7-20
#    ::getClient-A 			Java CADK 7-21
#    ::getClientGroup-A		Java CADK 7-21
#    ::getClientId-A			Java CADK 7-21
#    ::getClientName-A		   C CADK
#    ::getEventDef			Java CADK 7-21
#    ::getEventDefs			Java CADK 7-21
#    ::getEvents			Java CADK 7-22
#    ::getPublishWaitTime		Java CADK 7-22
#    ::init				Java CADK 7-23
#    ::initStatusSubscriptions	Java CADK 7-23
#    ::isConnectTest			Java CADK 7-23
#    ::isMaster              	Java CADK 7-24
#    ::loadProperties		Java CADK 7-24
#    ::publishStatus-A		Java CADK 7-26
#    ::removeEvent			Java CADK 7-26
#    ::setConnectionDescriptorSSL	Java CADK 7-27
#    ::setStatusProperty		Java CADK 7-28
#
#    ::err-A   			ala Mysql::
#    ::errmsg-A			ala Mysql::
#    ::error-A
#
#	Routines for working while $self is in callback space:
#	-----------------------------------------------------
#    ::createEvent-A            Java CADK 7-91
#    ::deliverAckReplyEvent-A   Java CADK 7-92
#    ::deliverReplyEvent-A      Java CADK 7-93
#    ::getEventTypeDef          Java CADK 7-94
#    ::getStringField-A         Java CADK 7-96 / Java-I 15-118
#    ::newSubscription-A        Java CADK 7-99
#    ::publish-A                Java CADK 7-99/7-100
#    ::requestEvent-A           Perl CADK :-)
#    ::setEventField-A          Java CADK 7-100
#    ::setStringField-A         Java CADK 7-101
#===============================================================================



Aw::Adapter
_new ( CLASS, version, ... )
	char * CLASS
	char * version

	PREINIT:
		awAdapterProperties * awProperties = NULL;
		int argc = 0;
		char ** argv;

	CODE:
		RETVAL = (xsAdapter *)safemalloc ( sizeof(xsAdapter) );	
		if ( RETVAL == NULL ) {
			setErrMsg ( &gErrMsg, 1, "Aw::Adapter::new:  unable to malloc new adapter" );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}
		/* initialize the error cleanly */
		RETVAL->err      = AW_NO_ERROR;
		RETVAL->errMsg   = NULL;
		RETVAL->Warn     = gWarn;

		RETVAL->handle   = NULL;
		RETVAL->callback = 0x0;
		RETVAL->firstCB  = 0x0;


   		if( SvROK(ST(2)) && (SvTYPE(SvRV(ST(2))) == SVt_PVHV) )
			awProperties = awxsHashToProperties ( (HV*)SvRV( ST(2) ) );
		else {
			int i;
			argv = XS_unpack_charPtrPtr ( ST(2) ); 
			argc = av_len ( (AV*)SvRV( ST(2) ) ) + 1;

			awProperties = awAdapterLoadProperties ( argc, argv );

			XS_release_charPtrPtr ( argv );

			if ( awProperties == NULL )
				XSRETURN_UNDEF;
		}

		if ( awProperties ) {
			/* start logging */
			awAdapterInitLogging ( awProperties );

			/* create the adapter structure */
			RETVAL->adapter = awAdapterCreate ( awProperties, version );
		}
		else {
			RETVAL->adapter = NULL;
		}

		/* register our callbacks */
		RETVAL->adapter->setupEventFunction         =& setupEvent;
		RETVAL->adapter->processRequestFunction     =& processRequest;
		RETVAL->adapter->cleanupEventTypeFunction   =& cleanupEventType;
		RETVAL->adapter->beginSetupFunction         =& beginSetup;
		RETVAL->adapter->endSetupFunction           =& endSetup;
		RETVAL->adapter->processPublicationFunction =& processPublication;
		RETVAL->adapter->beginTransactionFunction   =& beginTransaction;
		RETVAL->adapter->endTransactionFunction     =& endTransaction;

	OUTPUT:
	RETVAL



void
addEvent ( self, event )
	Aw::Adapter self
	Aw::EventType event

	CODE:
		AWXS_CLEARERROR

		awAdapterAddEvent ( self->adapter, event->adapterET );



void
checkPublications ( self )
	Aw::Adapter self

	CODE:
		AWXS_CLEARERROR

		awAdapterCheckPublications ( self->adapter );



awaBool
createAdapterClient ( self, stateShare )
	Aw::Adapter self
	awaBool stateShare

	PREINIT:
		awaBool keepShareState;

	CODE:
		AWXS_CLEARERROR

		keepShareState = self->adapter->useSharedState;
		self->adapter->useSharedState = stateShare;

		gErr = self->err = awAdapterCreateClient ( self->adapter );

		AWXS_CHECKSETERROR

		self->adapter->useSharedState = keepShareState;

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



awaBool
createClient ( self )
	Aw::Adapter self

	ALIAS:
		Aw::Adapter::publishStatus = 1

	CODE:
		AWXS_CLEARERROR

		gErr = self->err
		= (ix)
		  ? awAdapterPublishStatus ( self->adapter )
		  : awAdapterCreateClient  ( self->adapter )
		;

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



void
_deliverErrorEvent ( self, category, msgId, strings )
	Aw::Adapter self
	int category
	int msgId
	char ** strings

	PREINIT:
		int n;

	CODE:
		AWXS_CLEARERROR

		n = av_len ( (AV*)SvRV( ST(3) ) );

		switch ( n )
		  {
			case  0:
				awAdapterDeliverErrorEvent ( self->handle, category, msgId, strings[0] );
				break;

			case  1:
				awAdapterDeliverErrorEvent ( self->handle, category, msgId, strings[0], strings[1] );
				break;

			case  2:
				awAdapterDeliverErrorEvent ( self->handle, category, msgId, strings[0], strings[1], strings[2] );
				break;

			case  3:
				awAdapterDeliverErrorEvent ( self->handle, category, msgId, strings[0], strings[1], strings[2], strings[3] );
				break;

			case  4:
				awAdapterDeliverErrorEvent ( self->handle, category, msgId, strings[0], strings[1], strings[2], strings[3], strings[4] );
				break;

			default:
				awAdapterDeliverErrorEvent ( self->handle, category, msgId, strings[0], strings[1], strings[2], strings[3], strings[4], strings[5] );
				break;
		  }

	CLEANUP:
		XS_release_charPtrPtr ( strings );


awaBool
destroyClient ( self )
	Aw::Adapter self

	CODE:
		AWXS_CLEARERROR

		if ( self->adapter->brokerClient ) {
			gErr = self->err = awDisconnectClient ( self->adapter->brokerClient );
			if ( self->err == AW_NO_ERROR );
				gErr = self->err = awDestroyClient ( self->adapter->brokerClient );
		}

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL


Aw::Event
getAdapterInfo ( self )
	Aw::Adapter self

	PREINIT:
		char CLASS[] = "Aw::Event";

	CODE:
		AWXS_CLEARERROR

		RETVAL = (xsBrokerEvent *)safemalloc ( sizeof(xsBrokerEvent) );	
		if ( RETVAL == NULL ) {
			self->errMsg = setErrMsg ( &gErrMsg, 1, "Aw::Adapter::getAdapterInfo:  unable to malloc new event" );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}
		/* initialize the error cleanly */
		RETVAL->err    = NULL;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		RETVAL->event = awAdapterGetAdapterInfo ( self->adapter );

	OUTPUT:
	RETVAL



char *
getAdapterType ( self )
	Aw::Adapter self

	ALIAS:
		Aw::Adapter::getAdapterVersion    = 1
		Aw::Adapter::getBroker            = 2
		Aw::Adapter::getBrokerHost        = 3
		Aw::Adapter::getBrokerName        = 4
		Aw::Adapter::getClientGroup       = 5
		Aw::Adapter::getClientId          = 6
		Aw::Adapter::getClientName        = 7
		Aw::Adapter::getAdapterEventName  = 8
		
	CODE:
		AWXS_CLEARERROR

		RETVAL 
		= (ix==4)
		  ? self->adapter->brokerName                                // 4
		  : (ix>4)
		    ? (ix>6)
		      ? (ix==8)
		        ? awGetEventTypeName ( self->adapter->adapterInfo )  // 8
		        : self->adapter->clientName                          // 7
		      : (ix==6)
		        ? self->adapter->clientId                            // 6
		        : self->adapter->clientGroup                         // 5
		    : (ix>2)
		      ? (ix==3)
		        ? self->adapter->brokerHost                          // 3
		        : self->adapter->broker                              // 2
		      : (ix)
		        ? self->adapter->adapterVersion                      // 1
		        : self->adapter->adapterType                         // 0
		;

	OUTPUT:
	RETVAL



Aw::Client
getAdminClient ( self )
	Aw::Adapter self

	ALIAS:
		#   I don't know the difference here
		Aw::Adapter::getClient       = 1
		Aw::Adapter::getBrokerClient = 2

	PREINIT:
		char CLASS[] = "Aw::Client";

	CODE:
		AWXS_CLEARERROR

		RETVAL = (xsBrokerClient *)safemalloc ( sizeof(xsBrokerClient) );
		if ( RETVAL == NULL ) {
			self->errMsg = setErrMsg ( &gErrMsg, 1, "Aw::Adapter::getAdminClient:  unable to malloc new adapter" );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}
		/* initialize the error cleanly */
		RETVAL->err    = AW_NO_ERROR;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		RETVAL->client
		= (ix)
		  ? self->adapter->brokerClient
		  : self->adapter->adminClient
		;

	OUTPUT:
	RETVAL



Aw::EventType
getEventDef ( self, ... )
	Aw::Adapter self
	
	ALIAS:
		Aw::Adapter::eventDef = 1

	PREINIT:
		char CLASS[] = "Aw::EventType";

	CODE:
		AWXS_CLEARERROR

		RETVAL = (xsAdapterEventType *)safemalloc ( sizeof(xsAdapterEventType) );
		if ( RETVAL == NULL ) {
			self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new adapter event" );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}
		/* initialize the error cleanly */
		RETVAL->err    = AW_NO_ERROR;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		RETVAL->adapterET
		= (ix)
		  ? self->handle->eventDef
		  : awAdapterGetEventDef ( self->adapter, (char *)SvPV ( ST(1), PL_na ) )
		;

	OUTPUT:
	RETVAL



AV *
getEventDefsRef ( self )
	Aw::Adapter self

	PREINIT:
		int n;

	CODE:
		AWXS_CLEARERROR

		if ( self->adapter->eventDefs == NULL )
			XSRETURN_UNDEF;

		n = awVectorSize ( self->adapter->eventDefs );

		/* convert to an AV of xsBrokerTypeDefs */
		{
		SV *sv;
		int i;
		xsAdapterEventType * eventDef;

		RETVAL = newAV();

		for ( i = 0; i<n; i++ ) {
			eventDef = (xsAdapterEventType *)safemalloc ( sizeof(xsAdapterEventType) );
			if ( eventDef == NULL ) {
				setErrMsg ( &gErrMsg, 1, "Aw::Adapter::getEventDefs: unable to malloc new adapter event" );
#ifdef AWXS_WARNS
				if ( self->Warn )
					warn ( self->errMsg );
#endif /* AWXS_WARNS */
				XSRETURN_UNDEF;
			}
			/* initialize the error cleanly */
			eventDef->err    = AW_NO_ERROR;
			eventDef->errMsg = NULL;
			eventDef->Warn   = gWarn;

			memcpy ( eventDef->adapterET, awVectorGet ( self->adapter->eventDefs, i ), sizeof (awAdapterEventType) );
			sv = sv_newmortal();
			sv_setref_pv( sv, "Aw::EventType", (void*)eventDef );
			SvREFCNT_inc(sv);
			av_push( RETVAL, sv );
		}

		}

	OUTPUT:
		RETVAL
	
	CLEANUP:
		SvREFCNT_dec ( RETVAL );



awaBool
getEvents ( self )
	Aw::Adapter self

	CODE:
		AWXS_CLEARERROR

		OneAdapter    = self;
		OneAdapterRef = ST(0);

		gErr = self->err = awAdapterGetEvents ( self->adapter );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



int
getPublishWaitTime ( self )
	Aw::Adapter self

	CODE:
		AWXS_CLEARERROR

		RETVAL = awAdapterGetPublishWaitTime ( self->adapter );

	OUTPUT:
	RETVAL



awaBool
init ( self )
	Aw::Adapter self

	ALIAS:
		Aw::Adapter::connectTest        = 1
		Aw::Adapter::isConnectTest      = 2
		Aw::Adapter::isMaster           = 3
		Aw::Adapter::initSessions       = 4
		Aw::Adapter::isSessions         = 5
		Aw::Adapter::isSessionManager   = 6
		Aw::Adapter::usesSessionManager = 7

	CODE:
		AWXS_CLEARERROR
#if !( AW_VERSION_31 || AW_VERSION_40 )
		if ( ix > 3 ) {
			warn ( "'*Session' methods available in AW v3.1+.  Recompile Aw.xs if you have reached this warning in error.");
			XSRETURN_UNDEF;
		}
#endif /* ( AW_VERSION_31 || AW_VERSION_40 ) */

		RETVAL
		= (ix>3)
		  ? (ix>5)
		    ? (ix==7)
		      ? awAdapterUsesSessionManager ( self->adapter )     // 7
                      : awAdapterIsSessionManager ( self->adapter )       // 6
		    : (ix>4)
		      ? awAdapterIsSessions ( self->adapter )             // 5
                      : awAdapterInitSessions ( self->adapter )           // 4
		  : (ix>1)
		    ? (ix==3)
		      ? awAdapterIsMaster ( self->adapter )               // 3
		      : awAdapterIsConnectTest ( self->adapter )          // 2
		    : (ix)
		      ? (awaBool) awAdapterConnectTest ( self->adapter )  // 1
		      : awAdapterInit ( self->adapter )                   // 0
		;

	OUTPUT:
	RETVAL



awaBool
initStatusSubscriptions ( self )
	Aw::Adapter self

	CODE:
		AWXS_CLEARERROR

		gErr = self->err = awAdapterInitStatusSubscriptions ( self->adapter );

		if ( self->err == AW_NO_ERROR )
			gErr = self->err = awAdapterPublishStatus ( self->adapter );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



awaBool
_loadProperties ( self, ... )
	Aw::Adapter self

	PREINIT:
		awAdapterProperties * awProperties = NULL;
		int argc = 0;
		char ** argv;
		
	CODE:
		AWXS_CLEARERROR

   		if( SvROK(ST(1)) && (SvTYPE(SvRV(ST(1))) == SVt_PVHV) )
			awProperties = awxsHashToProperties ( (HV*)SvRV( ST(2) ) );
		else {
			int i;
			argv = XS_unpack_charPtrPtr ( ST(1) ); 
			argc = av_len ( (AV*)SvRV( ST(1) ) ) + 1;

			awProperties = awAdapterLoadProperties ( argc, argv );

			XS_release_charPtrPtr ( argv );

			if ( awProperties == NULL )
				XSRETURN_UNDEF;
		}

		/* start logging -in Java loading does logging also... */
		awAdapterInitLogging ( awProperties );

		RETVAL = awaTrue;

	OUTPUT:
	RETVAL



void
removeEvent ( self, event_name )
	Aw::Adapter self
	char * event_name

	CODE:
		AWXS_CLEARERROR
		awAdapterRemoveEvent ( self->adapter, event_name );



awaBool
setConnectionDescriptorSSL ( self, desc )
	Aw::Adapter self
	Aw::ConnectionDescriptor desc

	CODE:
		AWXS_CLEARERROR

		gErr = self->err = awAdapterSetDescriptorSSL ( self->adapter, desc->desc );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



void
setStatusProperty ( self, propertyName )
	Aw::Adapter self
	char * propertyName

	CODE:
		AWXS_CLEARERROR
		awAdapterSetStatusProperty ( self->adapter, propertyName );



void
verifyLicense ( self, licenseKeyPrefix )
	Aw::Adapter self
	char * licenseKeyPrefix 

	CODE:
		AWXS_CLEARERROR
		awAdapterVerifyLicense ( self->adapter, licenseKeyPrefix );



#===============================================================================

MODULE = Aw			PACKAGE = Aw::Client

#===============================================================================

#===============================================================================
#  Aw::Client
#	::new
#	::DESTROY-A
#
#	::acknowledge			Java-I 15-8
#	::acknowledgeThrough		Java-I 15-9
#	::beginTransaction		Java-I 15-10
#	::cancelSubscription		Java-I 15-13
#	::canPublish			Java-I 15-16
#	::canSubscribe-A		Java-I 15-16
#	::clearQueue			Java-I 15-17
#	::deliver			Java-I 15-18/19
#	::deliverAckReplyEvent		Java-I 15-20
#	::deliverErrorReplyEvent	Java-I 15-22
#	::deliverNullReplyEvent		Java-I 15-23
#	::deliverReplyEvent		Java-I 15-27
#	::deliverReplyEvents		Java-I 15-28
#	::deliverRequestAndWait		Java-I 15-29
#	::disconnect			Java-I 15-31
#	::dispatch			Java-I 15-32
#	::doesSubscriptionExist 	Java-I 15-33
#	::endTransaction		Java-I 15-34
#	::getApplicationName		Java-I 15-35
#	::getBrokerHost			Java-I 15-35
#	::getBrokerName			Java-I 15-36
#	::getBrokerPort			Java-I 15-36
#	::getCanPublishNames		Java-I 15-37
#	::getCanSubscribeNames-A	Java-I 15-38
#	::getCanPublishTypeDefs		Java-I 15-37
#	::getCanSubscribeTypeDefs	Java-I 15-38
#	::getClientGroup		Java-I 15-39
#	::getClientId			Java-I 15-39
#	::getClientInfoset		Java-I 15-40
#	::getClientSSLEncryptionLevel	Java-I 15-40
#	::getConnectionDescriptor	Java-I 15-41
#	::getDefaultBrokerPort		Java-I 15-41
#	::getDefaultClientTimeOut	   C?
#	::getTerritoryName		Java-I 15-55
#	::getEvent			Java-I 15-42
#	::getEvents			Java-I 15-43 XX
#	::getEventTypeInfosetNames-A	Java-I 15-49
#	::getEventTypeNames-A		Java-I 15-50
#	::getFamilyNames-A
#	::getFamilyEventTypeNames-A
#	::getLastPublishSequenceNumber	Java-I 15-52
#	::getPlatformInfo		Java-I 15-52
#	::getPlatformInfoKeys		Java-I 15-52
#	::getQueueLength		Java-I 15-53
#	::getScopeNames-A		Java-I 15-54
#	::getScopeEventTypeNames-A	   C?
#	::getStateShareLimit		Java-I 15-54
#	::interruptDispatch		Java-I 15-56
#	::interruptGetEvents		Java-I 15-56
#	::isClientPending		Java-I 15-57
#	::isConnected			Java-I 15-57
#	::isPending			Java-I 15-58
#	::mainLoop			Java-I 15-58
#	::makeSubId			Java-I 15-59
#	::makeTag 			Java-I 15-59
#	::makeTransactionId		Java-I 15-59
#	::makeUniqueSubId		Java-I 15-60
#	::newOrReconnect-A		Java-I 15-60
#	::newSubscription		Java-I 15-64
#	::prime				Java-I 15-68
#	::primeAllClients		Java-I 15-68
#	::publish			Java-I 15-69
#	::reconnect			Java-I 15-72
#	::setStateShareLimit	Java-I 15-80
#	::stopMainLoop			Java-I 15-80
#	::toString			Java-I 15-81
#	::threadedCallBacks		Java-I 15-81
#	::cancellCallbacks		Java-I 15-12
#	::cancelCallbackForSubId-A	Java-I 15-11
#	::cancelCallbackForTag-A	Java-I 15-12
#
#       ::err-A				ala Mysql::
#       ::errmsg-A			ala Mysql::
#       ::error-A
#===============================================================================



Aw::Client
_new ( CLASS, broker_host, broker_name, client_id, client_group, app_name, ... )
	char * CLASS
	char * broker_host;
	char * broker_name;
	char * client_id;
	char * client_group;
	char * app_name;

	ALIAS:
		Aw::Client::_newOrReconnect = 1

	PREINIT:
		BrokerConnectionDescriptor myDesc = NULL;
		
	CODE:
		RETVAL = (xsBrokerClient *)safemalloc ( sizeof(xsBrokerClient) );
		if ( RETVAL == NULL ) {
			setErrMsg ( &gErrMsg, 1, "unable to malloc new client" );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}
		/* initialize the error cleanly */
		RETVAL->err    = AW_NO_ERROR;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;


		if ( client_id[0] == '\0' )
			client_id = NULL;
		if ( broker_name[0] == '\0' )
			broker_name = NULL;

		if ( items == 7 && ( sv_isobject(ST(6)) && (SvTYPE(SvRV(ST(6))) == SVt_PVMG) ) )
			myDesc = AWXS_BROKERCONNECTIONDESC(6)->desc;

		gErr = RETVAL->err
		= ( ix )
		  ? awNewOrReconnectBrokerClient ( broker_host, broker_name, client_id, client_group, app_name, myDesc, &RETVAL->client )
		  : awNewBrokerClient ( broker_host, broker_name, client_id, client_group, app_name, myDesc, &RETVAL->client )
		;


		if ( RETVAL->err != AW_NO_ERROR ) {
			setErrMsg ( &gErrMsg, 2, "unable to instantiate new event %s", awErrorToCompleteString ( RETVAL->err ) );
			Safefree ( RETVAL );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
			warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

	OUTPUT:
	RETVAL



awaBool
acknowledge ( self, seqn )
	Aw::Client self
	CORBA::LongLong seqn

	ALIAS:
		Aw::Client::acknowledgeThrough = 1

	PREINIT:
		BrokerLong blValue;	

	CODE:
		AWXS_CLEARERROR

		blValue = awBrokerLongFromString ( longlong_to_string ( seqn ) );
		
		gErr = self->err
		= (ix)
		  ? awAcknowledgeThrough ( self->client, blValue )
		  : awAcknowledge ( self->client, blValue )
		;

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



int
_beginTransaction ( self, transaction_id, required_level, participants )
	Aw::Client self
	char * transaction_id
	int required_level
	char ** participants

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err = awBeginTransaction ( self->client, transaction_id, required_level, (items-3), participants, &RETVAL );

		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
		RETVAL

	CLEANUP:
		XS_release_charPtrPtr ( participants );



awaBool
cancellCallbacks ( self, ... )
	Aw::Client self

	ALIAS:
		Aw::Client::cancelCallbackForSubId =  1
		Aw::Client::cancelCallbackForTag   =  2
		Aw::Client::clearQue               =  3
		Aw::Client::disconnect             =  4
		Aw::Client::dispatch               =  5
		Aw::Client::interruptGetEvents     =  6
		Aw::Client::interruptDispatch      =  7
		Aw::Client::mainLoop               =  8
		Aw::Client::prime                  =  9
		Aw::Client::primeAllClients        = 10
		Aw::Client::stopMainLoop           = 11
		Aw::Client::threadedCallBacks      = 12

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err
		= (ix>6)
		  ? (ix>9)
                    ? (ix>10)
		      ? (ix>11)
                        ? awThreadedCallbacks ( (BrokerBoolean)SvIV( ST(1) ) )           // 12
		        : awStopMainLoop ()                                              // 11
                      : awPrimeAllClients ()                                             // 10
		    : (ix>7)
		      ? (ix>8)
		        ? awPrimeClient ( self->client )                                 //  9
                        : awMainLoop ()                                                  //  8
	              : awInterruptDispatch ()                                           //  7
		  : (ix==6)
		    ? awInterruptGetEvents ( self->client )                              //  6
		    : (ix>2)
		      ? (ix>3)
		        ? (ix>4)
		          ? awDispatch ( (int)SvIV(ST(1)) )                              //  5
		          : awDisconnectClient ( self->client )                          //  4
		        : awClearClientQueue ( self->client )                            //  3
		      : (ix>0)
		        ? (ix>1)
		          ? awCancelCallbackForTag ( self->client, (int)SvIV(ST(1)) )    //  2
		          : awCancelCallbackForSubId ( self->client, (int)SvIV(ST(1)) )  //  1
		        : awCancelCallbacks ( self->client )                             //  0
		;

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



awaBool
_cancelSubscription ( self, event_type_name, filter )
	Aw::Client self
	char * event_type_name
	char * filter

	ALIAS:
		Aw::Client::doesSubscriptionExist = 1
		Aw::Client::setPlatformInfo       = 2

	PREINIT:
		BrokerBoolean bRV;

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err
		= (ix)
		  ? (ix-1)
		    ? awSetPlatformInfo ( event_type_name, filter )
		    : awDoesSubscriptionExist ( self->client, event_type_name, filter, &bRV )
		  : awCancelSubscription ( self->client, event_type_name, filter )
		;

		AWXS_CHECKSETERROR

		RETVAL
		= (ix == 1)
		  ? (awaBool) bRV
		  : ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue
		;

	OUTPUT:
	RETVAL



awaBool
_cancelSubscriptions ( self, ... )
	Aw::Client self

	PREINIT:
		int i;

	CODE:
		AWXS_CLEARERROR

		for (i=1; i<items; i++)
			if ( self->err == AW_NO_ERROR )
				gErr = self->err =
				awCancelSubscriptionFromStruct ( self->client, AWXS_BROKERSUBSCRIPTION(i) );
			else
				awCancelSubscriptionFromStruct ( self->client, AWXS_BROKERSUBSCRIPTION(i) );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;
		
	OUTPUT:
	RETVAL



awaBool
canPublish ( self, event_type_name )
	Aw::Client self
	char * event_type_name

	ALIAS:
		Aw::Client::canSubscribe = 1

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err
		= (ix)
		  ? awCanSubscribe ( self->client, event_type_name, &RETVAL )
		  : awCanPublish   ( self->client, event_type_name, &RETVAL )
		;

		AWXS_CHECKSETERROR_RETURN
		
	OUTPUT:
	RETVAL



awaBool
deliver ( self, dest_id, ... )
	Aw::Client self
	char * dest_id

	PREINIT:
		int i, n;
		AV * av = NULL;
		BrokerEvent ** events;

	CODE:
		AWXS_CLEARERROR
		
		if ( SvTYPE(SvRV(ST(2))) == SVt_PVAV ) {
			/* we were passed a properties array ref */
			av = (AV*)SvRV( ST(2) );
			n  = av_len ( av ) + 1;

		} else if ( items == 3 ) {
			gErr = self->err = awDeliverEvent ( self->client, dest_id, AWXS_BROKEREVENT(2)->event );
		} else {
			/* we were passed a properties array */
			n = items - 2;
			av = av_make ( n, &ST(2) );
		}
		

		if ( av ) {
			SV ** sv;
			events = (BrokerEvent **) safemalloc ( n * sizeof (BrokerEvent *) );
			for ( i = 0; i<n; i++ ) {
				sv = av_fetch ( av, i, 0 );
				events[i] =& ((xsBrokerEvent *)SvIV((SV*)SvRV( *sv )))->event;
			}
			gErr = self->err = awDeliverEvents ( self->client, dest_id, n, *events );
			av_undef ( av );

			Safefree ( events );

		}

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



awaBool
deliverAckReplyEvent ( self, request_event, publish_seqn )
	Aw::Client self
	Aw::Event request_event
	CORBA::LongLong publish_seqn

	PREINIT:
		BrokerLong blValue;

	CODE:
		AWXS_CLEARERROR
		
		blValue = awBrokerLongFromString ( longlong_to_string ( publish_seqn ) );
		
		gErr = self->err = awDeliverAckReplyEvent ( self->client, request_event->event, blValue );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



awaBool
deliverNullReplyEvent ( self, request_event, reply_event_type_name, publish_seqn )
	Aw::Client self
	Aw::Event request_event
	char * reply_event_type_name
	CORBA::LongLong publish_seqn

	PREINIT:
		BrokerLong blValue;

	CODE:
		AWXS_CLEARERROR
		
		blValue = awBrokerLongFromString ( longlong_to_string ( publish_seqn ) );
		
		gErr = self->err = awDeliverNullReplyEvent ( self->client, request_event->event, reply_event_type_name, blValue );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



int
deliverPartialReplyEvents ( self, request_event, ... )
	Aw::Client self
	Aw::Event request_event

	ALIAS:
		Aw::Client::deliverReplyEvents = 1

	PREINIT:
		int i, n;
		int flag;
		AV * av = NULL;
		BrokerEvent ** events;

	CODE:
		AWXS_CLEARERROR
		
		flag = (int)SvIV(ST(items-1));

		if ( SvTYPE(SvRV(ST(2))) == SVt_PVAV ) {
			/* we were passed a properties array ref */
			av = (AV*)SvRV( ST(2) );
			n  = av_len ( av ) + 1;

		} else {
			/* we were passed a properties array */
			n = items - 3;
			av = av_make ( n, &ST(2) );
		}
		

		if ( av ) {
			SV ** sv;
			events = (BrokerEvent **) malloc ( n * sizeof (BrokerEvent *) );
			for ( i = 0; i<n; i++ ) {
				sv = av_fetch ( av, i, 0 );
				events[i] =& ((xsBrokerEvent *)SvIV((SV*)SvRV( *sv )))->event;
			}

			gErr = self->err 
			= (ix)
			  ? awDeliverReplyEvents ( self->client, request_event->event, n, *events )
			  : awDeliverPartialReplyEvents ( self->client, request_event->event, n, *events, flag, &RETVAL )
			;

			av_undef ( av );
			Safefree ( events );

		}


		if ( self->err != AW_NO_ERROR || av == NULL ) {
			if ( av )
				Safefree ( av );

			AWXS_CHECKSETERROR

			XSRETURN_UNDEF;
		}

	OUTPUT:
	RETVAL



awaBool
_deliverReplyEvent ( self, request_event, reply_event )
	Aw::Client self
	Aw::Event request_event
	Aw::Event reply_event

	ALIAS:
		Aw::Client::deliverErrorReplyEvent = 1

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err
		= (ix)
		  ? awDeliverErrorReplyEvent ( self->client, request_event->event, reply_event->event )
		  : awDeliverReplyEvent ( self->client, request_event->event, reply_event->event )
		;

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



AV *
deliverRequestAndWaitRef ( self, dest_id, event, msecs )
	Aw::Client self
	char * dest_id
	Aw::Event event
	int msecs

	PREINIT:
		BrokerEvent * reply_events;
		int n;

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err = awDeliverRequestAndWait ( self->client, dest_id, event->event, msecs, &n, &reply_events );

		AWXS_CHECKSETERROR


		/* now convert reply_events into an AV */
		{
		SV *sv;
		int i;
		xsBrokerEvent * ev;

			RETVAL = newAV();
			for ( i = 0; i<n; i++ ) {
				ev = (xsBrokerEvent *)safemalloc ( sizeof(xsBrokerEvent) );
				if ( ev == NULL ) {
					self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new event" );
#ifdef AWXS_WARNS
					if ( self->Warn )
						warn ( self->errMsg );
#endif /* AWXS_WARNS */
					continue;
				}
				ev->err      = NULL;
				ev->errMsg   = NULL;
				ev->Warn     = gWarn;
				ev->deleteOk = 0;

				ev->event    = reply_events[i];
				
				sv = sv_newmortal();
				sv_setref_pv( sv, "Aw::Event", (void*)ev );
				SvREFCNT_inc(sv);
				av_push( RETVAL, sv );
			}
		}
	
	OUTPUT:
		RETVAL
	
	CLEANUP:
		SvREFCNT_dec ( RETVAL );



int
endTransaction ( self, transaction_id, mode )
	Aw::Client self
	char * transaction_id
	int mode

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err = awEndTransaction ( self->client, transaction_id, mode, &RETVAL );

		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



AV *
getAccessLabelRef ( self )
	Aw::Client self

	PREINIT:
		int n;
		short ** labels;

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err = awGetClientAccessLabel ( self->client, &n, labels );

		AWXS_CHECKSETERROR_RETURN

		
		{	/* convert shorts into AV */
		SV *sv;
		int i;
			RETVAL = newAV();
			for ( i = 0; i<n; i++ ) {
				sv = newSViv( *labels[i] );
				av_push( RETVAL, sv );
			}
		}

	OUTPUT:
		RETVAL
	
	CLEANUP:
		free ( labels ); // free policy is not detailed in the C Platform Vol. 1 p 15-58
                                 // nor in awclient.h, assume it is a block
		SvREFCNT_dec ( RETVAL );



Aw::SSLCertificate
getBrokerSSLCertificate ( self )
	Aw::Client self

	PREINIT:
		char CLASS[] = "Aw::SSLCertificate";

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err = awGetBrokerSSLCertificate ( self->client, &RETVAL );

		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



int
getBrokerVersionNumber ( self )
	Aw::Client self

	CODE:
		AWXS_CLEARERROR
#if ( AW_VERSION_31 || AW_VERSION_40 )

		gErr = self->err = awGetBrokerVersionNumber ( self->client, &RETVAL );

		AWXS_CHECKSETERROR_RETURN
#else
		warn ( "'getBrokerVersionNumber' available in AW v3.1+.  Recompile Aw.xs if you have reached this warning in error.");
		XSRETURN_UNDEF;
#endif /* ( AW_VERSION_31 || AW_VERSION_40 ) */

	OUTPUT:
	RETVAL



char **
getCanPublishNamesRef ( self, ... )
	Aw::Client self

	ALIAS:
		Aw::Client::getCanSubscribeNamesRef     = 1
		Aw::Client::getEventTypeInfosetNamesRef = 2
		Aw::Client::getEventTypeNamesRef        = 3
		Aw::Client::getFamilyEventTypeNamesRef  = 4
		Aw::Client::getFamilyNamesRef           = 5
		Aw::Client::getPlatformInfoKeysRef      = 6
		Aw::Client::getScopeEventTypeNamesRef   = 7
		Aw::Client::getScopeNamesRef            = 8

	PREINIT:
		int count_charPtrPtr;
		char * field_name = NULL;

	CODE:
		AWXS_CLEARERROR
		
		if ( items == 2 )
			field_name = (char *)SvPV ( ST(1), PL_na );

		gErr = self->err 
		= (ix==4)
#ifdef AW_COMPATIBLE
		  ? awGetFamilyEventTypeNames ( self->client, field_name, &count_charPtrPtr, &RETVAL )
#else
		  ? (BrokerError)AW_ERROR_INCOMPATIBLE_VERSION 
#endif /* AW_COMPATIBLE */
		  : (ix>4)
		    ? (ix>6)
		      ? (ix==8)
		        ? awGetScopeNames ( self->client, &count_charPtrPtr, &RETVAL )
		        : awGetScopeEventTypeNames ( self->client, field_name, &count_charPtrPtr, &RETVAL )
		      : (ix==6)
		        ? awGetPlatformInfoKeys ( &count_charPtrPtr, &RETVAL )
#ifdef AW_COMPATIBLE
		        : awGetFamilyNames ( self->client, &count_charPtrPtr, &RETVAL )
#else
		        : (BrokerError)AW_ERROR_INCOMPATIBLE_VERSION 
#endif /* AW_COMPATIBLE */
		    : (ix>2)
		      ? (ix==3)
		        ? awGetEventTypeNames ( self->client, &count_charPtrPtr, &RETVAL )
		        : awGetEventTypeInfosetNames ( self->client, field_name, &count_charPtrPtr, &RETVAL )
		      : (ix)
		        ? awGetCanSubscribeNames ( self->client, &count_charPtrPtr, &RETVAL )
		        : awGetCanPublishNames ( self->client, &count_charPtrPtr, &RETVAL )
		;
	
		AWXS_CHECKSETERROR_RETURN
		
	OUTPUT:
	RETVAL



AV *
getCanPublishTypeDefsRef ( self )
	Aw::Client self

	ALIAS:
		Aw::Client::getCanSubscribeTypeDefs = 1

	PREINIT:
		BrokerTypeDef * typeDefs;
		int n;

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err
		= (ix)
		  ? awGetCanSubscribeTypeDefs ( self->client, &n, &typeDefs )
		  : awGetCanPublishTypeDefs   ( self->client, &n, &typeDefs )
		;
	
		AWXS_CHECKSETERROR_RETURN

		/* convert to an AV of xsBrokerTypeDefs */
		{
		SV *sv;
		int i;
		xsBrokerTypeDef * typeDef;

			RETVAL = newAV();
			for ( i = 0; i<n; i++ ) {
				typeDef = (xsBrokerTypeDef *)safemalloc ( sizeof(xsBrokerTypeDef) );
				if ( typeDef == NULL ) {
					self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new type def" );
#ifdef AWXS_WARNS
					if ( self->Warn )
						warn ( self->errMsg );
#endif /* AWXS_WARNS */
					XSRETURN_UNDEF;
				}
				/* initialize the error cleanly */
				typeDef->err    = AW_NO_ERROR;
				typeDef->errMsg = NULL;
				typeDef->Warn   = gWarn;
				memcpy ( typeDef->type_def, typeDefs[i], sizeof(BrokerTypeDef) );

				sv = sv_newmortal();
				sv_setref_pv( sv, "Aw::TypeDef", (void*)typeDef );
				SvREFCNT_inc(sv);
				av_push( RETVAL, sv );
			}
		}

	OUTPUT:
		RETVAL
	
	CLEANUP:
		SvREFCNT_dec ( RETVAL );
		free ( typeDefs );



CORBA::LongLong
getClientLastPublishSequenceNumber ( self )
	Aw::Client self

	PREINIT:
		BrokerLong blValue;
		char blString[24];

	CODE:
		AWXS_CLEARERROR

		gErr = self->err = awGetClientLastPublishSequenceNumber ( self->client, &blValue );

		AWXS_CHECKSETERROR_RETURN

		RETVAL = longlong_from_string ( awBrokerLongToString( blValue, blString ) );

	OUTPUT:
	RETVAL



Aw::ConnectionDescriptor
getConnectionDescriptor ( self )
	Aw::Client self

	PREINIT:
		char CLASS[] = "Aw::ConnectionDescriptor";

	CODE:
		AWXS_CLEARERROR
		
		RETVAL = (xsBrokerConnectionDescriptor *)safemalloc ( sizeof(xsBrokerConnectionDescriptor) );
		if ( RETVAL == NULL ) {
			self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new connection descriptor copy" );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}
		/* initialize the error cleanly */
		RETVAL->err    = AW_NO_ERROR;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		gErr = self->err = awGetClientConnectionDescriptor ( self->client, &RETVAL->desc );

		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



int
getDefaultBrokerPort ( self, ... )
	Aw::Client self

	ALIAS:
		Aw::Client::setDefaultClientTimeOut = 1
		Aw::Client::makeSubId               = 2
		Aw::Client::makeTag                 = 3

	CODE:
		AWXS_CLEARERROR
		
		RETVAL
		= (ix>=2)
		  ? (ix-2)
		    ? awMakeTag ( self->client )
		    : awMakeSubId ( self->client )
		  : (ix)
		    ? awSetDefaultClientTimeout ( (int)SvIV( ST(1) ) )
		    : awGetDefaultBrokerPort ()
		;

	OUTPUT:
	RETVAL



AV *
getSubscriptionsRef ( self )
	Aw::Client self

	PREINIT:
		int n;
		BrokerSubscription * subs;

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err = awGetSubscriptions ( self->client, &n, &subs );

		AWXS_CHECKSETERROR_RETURN

		{		/* now convert subs into an AV */
		SV *sv;
		int i;
		BrokerSubscription * sub;

			RETVAL = newAV();
			for ( i = 0; i<n; i++ ) {
				sv = sv_newmortal();
				sub = (BrokerSubscription *) safemalloc ( sizeof(BrokerSubscription) );
				sub->sub_id = subs[i].sub_id;
				sub->event_type_name = strdup ( subs[i].event_type_name );
				sub->filter = strdup ( subs[i].filter );
				sv_setref_pv( sv, "Aw::Subscription", sub );
				SvREFCNT_inc(sv);
				av_push( RETVAL, sv );
			}
		}

	OUTPUT:
		RETVAL
	
	CLEANUP:
		SvREFCNT_dec ( RETVAL );
		free ( subs );



Aw::Event
getEvent ( self, ... )
	Aw::Client self

	ALIAS:
		Aw::Client::getClientInfoset = 1

	PREINIT:
		char CLASS[] = "Aw::Event";

	CODE:
		AWXS_CLEARERROR
		
		RETVAL = (xsBrokerEvent *)safemalloc ( sizeof(xsBrokerEvent) );
		if ( RETVAL == NULL ) {
			self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new event" );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}
		RETVAL->err      = NULL;
		RETVAL->errMsg   = NULL;
		RETVAL->Warn     = gWarn;
		RETVAL->deleteOk = 0;

		gErr = self->err
		= (ix)
		  ? awGetClientInfoset( self->client, &RETVAL->event )
		  : awGetEvent ( self->client, (int)SvIV(ST(1)), &RETVAL->event )
		;

		if ( self->err != AW_NO_ERROR ) {
			self->errMsg = setErrMsg ( &gErrMsg, 2, "unable to instantiate new event %s", awErrorToCompleteString ( self->err ) );
			Safefree ( RETVAL );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

	OUTPUT:
	RETVAL



AV *
getEventsRef ( self, max_events, msecs, ... )
	Aw::Client self
	int max_events
	int msecs

	ALIAS:
		Aw::Client::getEventsWithAckRef = 1

	PREINIT:
		int n;
		BrokerEvent * events;

	CODE:
		AWXS_CLEARERROR

		gErr = self->err
		= (ix)
		  ? awGetEventsWithAck ( self->client, max_events, awBrokerLongFromString ( longlong_to_string ( SvLLV (ST(3)) ) ), msecs, &n, &events )
		  : awGetEvents ( self->client, max_events, msecs, &n, &events )
		;

		AWXS_CHECKSETERROR_RETURN


		/* convert to an AV of xsBrokerEvents */
		{
		SV *sv;
		int i;
		xsBrokerEvent * ev;

		RETVAL = newAV();

		for ( i = 0; i<n; i++ ) {
			ev = (xsBrokerEvent *)safemalloc ( sizeof(xsBrokerEvent) );
			if ( ev == NULL ) {
				self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new event" );
#ifdef AWXS_WARNS
				if ( self->Warn )
					warn ( self->errMsg );
#endif /* AWXS_WARNS */
				continue;
			}
			/* initialize the error cleanly */
			ev->err      = AW_NO_ERROR;
			ev->errMsg   = NULL;
			ev->Warn     = gWarn;
			ev->deleteOk = 0;

			ev->event = events[i];

			sv = sv_newmortal();
			sv_setref_pv( sv, "Aw::Event", (void*)ev );
			SvREFCNT_inc(sv);
			av_push( RETVAL, sv );
		}  /* for */
		}

	OUTPUT:
		RETVAL
	
	CLEANUP:
		SvREFCNT_dec ( RETVAL );



Aw::TypeDef
getEventTypeDef ( self, event_type_name )
	Aw::Client self
	char * event_type_name

	PREINIT:
		char CLASS[] = "Aw::TypeDef";

	CODE:
		AWXS_CLEARERROR
		
		RETVAL = (xsBrokerTypeDef *)safemalloc ( sizeof(xsBrokerTypeDef) );
		if ( RETVAL == NULL ) {
			self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new type def" );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}
		/* initialize the error cleanly */
		RETVAL->err    = AW_NO_ERROR;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		gErr = self->err = awGetEventTypeDef ( self->client, event_type_name, &RETVAL->type_def );

		if ( self->err != AW_NO_ERROR ) {
			self->errMsg = setErrMsg ( &gErrMsg, 2, "unable to instantiate new event %s", awErrorToCompleteString ( self->err ) );
			Safefree ( RETVAL );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

	OUTPUT:
	RETVAL



AV *
getEventTypeDefsRef ( self, event_type_names )
	Aw::Client self
	char ** event_type_names
	
	PREINIT:
		int n;
		BrokerTypeDef * typeDefs;

	CODE:
		AWXS_CLEARERROR
		
		n = av_len ( (AV*)SvRV( ST(1) ) ) + 1;
		gErr = self->err = awGetEventTypeDefs ( self->client, n, event_type_names, &typeDefs );

		AWXS_CHECKSETERROR_RETURN


		/* convert to an AV of xsBrokerTypeDefs */
		{
		SV *sv;
		int i;
		xsBrokerTypeDef * typeDef;

		RETVAL = newAV();

		for ( i = 0; i<n; i++ ) {
			typeDef = (xsBrokerTypeDef *)safemalloc ( sizeof(xsBrokerTypeDef) );
			if ( typeDef == NULL ) {
				setErrMsg ( &gErrMsg, 1, "unable to malloc new adapter event" );
#ifdef AWXS_WARNS
				if ( self->Warn || gWarn )
					warn ( gErrMsg );
#endif /* AWXS_WARNS */
				XSRETURN_UNDEF;
			}
			/* initialize the error cleanly */
			typeDef->err    = AW_NO_ERROR;
			typeDef->errMsg = NULL;
			typeDef->Warn   = gWarn;

			typeDef->type_def = typeDefs[i];

			sv = sv_newmortal();
			sv_setref_pv( sv, "Aw::TypeDef", (void*)typeDef );
			SvREFCNT_inc(sv);
			av_push( RETVAL, sv );
		}  /* for */
		}

	OUTPUT:
		RETVAL

	CLEANUP:
		XS_release_charPtrPtr ( event_type_names );
		free ( typeDefs );



AV *
getFds ( self )
	Aw::Event self

	PREINIT:
		int n, *ints;

	CODE:
		AWXS_CLEARERROR

		gErr = self->err = awGetFds( &n, &ints );

		AWXS_CHECKSETERROR_RETURN
		

		{
		SV *sv;
		int i;
			RETVAL = newAV();
			for ( i = 0; i<n; i++ ) {
				sv = newSViv( ints[i] );
				av_push( RETVAL, sv );
			}
		}

	OUTPUT:
		RETVAL
	
	CLEANUP:
		SvREFCNT_dec ( RETVAL );
		free ( ints );



awaBool
isClientPending ( self )
	Aw::Client self

	PREINIT:
		BrokerBoolean bRV;

	ALIAS:
		Aw::Client::isPending = 1
		
	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err
		= (ix)
		  ? awIsPending ( &bRV )
		  : awIsClientPending ( self->client, &bRV )
		;

		AWXS_CHECKSETERROR_RETURN

		RETVAL = (awaBool)bRV;

	OUTPUT:
	RETVAL



awaBool
isConnected ( self )
	Aw::Client self

	CODE:
		AWXS_CLEARERROR
		
		RETVAL = awIsClientConnected ( self->client );

	OUTPUT:
	RETVAL



char *
makeTransactionId ( self, ... )
	Aw::Client self

	ALIAS:
		Aw::Client::getApplicationName                  = 1
		Aw::Client::getBrokerHost                       = 2
		Aw::Client::getBrokerName                       = 3
		Aw::Client::getClientGroup                      = 4
		Aw::Client::getClientId                         = 5
		Aw::Client::getPlatformInfo                     = 6
		Aw::Client::getTerritoryName                    = 7
		Aw::Client::getSSLBrokerIssuerDistinguishedName = 8
		Aw::Client::getSSLBrokerDistinguishedName       = 9

	CODE:
		AWXS_CLEARERROR

		gErr = self->err
		= 
#ifdef AW_COMPATIBLE 
		  (ix>=8)
		  ? (ix==9)
		    ? awGetClientSSLBrokerIssuerDistinguishedName ( self->client, &RETVAL ) // 9
		    : awGetClientSSLBrokerDistinguishedName ( self->client, &RETVAL ) // 8
		  : 
#endif /* AW_COMPATIBLE */
		    (ix>=4)
		    ? (ix>=6)
		      ? (ix==7)
		        ? awGetClientTerritoryName ( self->client, &RETVAL )       // 7
		        : awGetPlatformInfo ( (char *)SvPV(ST(1),PL_na), &RETVAL ) // 6
		      : (ix==5)
		        ? awGetClientId ( self->client, &RETVAL )                  // 5
		        : awGetClientGroup ( self->client, &RETVAL )               // 4
		    : (ix>=2)
		      ? (ix==3)
		        ? awGetClientBrokerName ( self->client, &RETVAL )          // 3
		        : awGetClientBrokerHost ( self->client, &RETVAL )          // 2
		      : (ix)
		        ? awGetClientApplicationName ( self->client, &RETVAL )     // 1
		        : awMakeTransactionId ( self->client, &RETVAL )            // 0
		;

		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



int
makeUniqueSubId ( self )
	Aw::Client self

	ALIAS:
		Aw::Client::getBrokerPort               = 1
		Aw::Client::getFd                       = 2
		Aw::Client::getQueueLength              = 3
		Aw::Client::getSSLEncryptionLevel       = 4
		Aw::Client::getStateShareLimit          = 5

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err
		 = (ix>3)
		   ? (ix==5)
		     ? awGetClientStateShareLimit ( self->client, &RETVAL )     // 5
		     : awGetClientSSLEncryptionLevel ( self->client, &RETVAL )  // 4
		   : (ix>1)
		     ? (ix==3)
		       ? awGetClientQueueLength ( self->client, &RETVAL )       // 3
		       : awGetFd ( self->client, &RETVAL )                      // 2
		     : (ix)
		       ? awGetClientBrokerPort ( self->client, &RETVAL )        // 1
		       : awMakeUniqueSubId     ( self->client, &RETVAL )        // 0
		 ;

		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



char *
nameTest ( self )
	Aw::Client self

	CODE:
		RETVAL = GvNAME(CvGV(cv)) ;

	OUTPUT:
	RETVAL



awaBool
_newSubscription ( self, event_type_name, filter, ... )
	char * event_type_name
	char * filter

	ALIAS:
		Aw::Adapter::newSubscription = 1
		Aw::Util::newSubscription    = 2

	PREINIT:
		xsBrokerEvent * requestEvent;
		xsAdapterEventType * requestDef;

	CODE:
		if ( isdigit(filter[0]) )
			*filter = atoi ( filter );

		if ( ix ) {
			if ( items > 3 ) {
				requestEvent = AWXS_BROKEREVENT(3);

			} else {
				requestEvent = (xsBrokerEvent *)safemalloc ( sizeof (xsBrokerEvent) );
				requestEvent->event = 0;
			}
			if ( items > 4) {
				requestDef = AWXS_ADAPTEREVENTTYPE(4);
			} else {
				requestDef = (xsAdapterEventType *)safemalloc ( sizeof (xsAdapterEventType) );
				requestDef->adapterET = 0;
			}

		}

		if ( ix == 1 ) {
			awAdapterHandle handle;
			xsAdapter * self = AWXS_ADAPTER(0);

			awAdapterInitHandle ( &handle, self->adapter, requestEvent->event, requestDef->adapterET );

			gErr = self->err = awAdapterNewSubscription ( &handle, event_type_name, filter ); 

		} else if ( ix == 2 ) {
			xsAdapterUtil * self = AWXS_ADAPTERUTIL(0);
			if ( items > 3 )
				awAdapterInitHandle ( self->handle, self->adapter, requestEvent->event, requestDef->adapterET );

				gErr = self->err = awAdapterNewSubscription ( self->handle, event_type_name, filter );

		} else {
			xsBrokerClient * self = AWXS_BROKERCLIENT(0);
			gErr = self->err = awNewSubscription ( self->client, event_type_name, filter );
			if ( self->err != AW_NO_ERROR ) {
				self->errMsg = setErrMsg ( &gErrMsg, 3, "Could not create subscription for \"%s\": %s\n", event_type_name, awErrorToCompleteString ( self->err ) );
				if ( self->Warn || gWarn )
					warn ( self->errMsg );
			}

		}

		AWXS_CHECKSETERROR

		RETVAL = ( gErr == AW_NO_ERROR ) ? awaFalse : awaTrue;
	
	OUTPUT:
	RETVAL



awaBool
newSubscriptionWithId ( self, sub_id, event_type_name, ... )
	Aw::Client self
	int sub_id
	char * event_type_name

	PREINIT:
		char * filter = 0x0;

	CODE:
		AWXS_CLEARERROR

		if (items == 4) {
			filter = (char *)SvPV ( ST(3), PL_na );
			if ( isdigit(filter[0]) )
		  		*filter = atoi ( filter );
		}

		gErr = self->err = awNewSubscriptionWithId ( self->client, sub_id, event_type_name, filter );

		AWXS_CHECKSETERROR

		RETVAL = ( gErr == AW_NO_ERROR ) ? awaFalse : awaTrue;
	
	OUTPUT:
	RETVAL



awaBool
newSubscriptionFromStruct ( self, ... )
	Aw::Client self

	ALIAS:
		Aw::Client::newSubscriptionFromStructs = 1
		
	PREINIT:
		AV * av = NULL;
		SV ** sv;
		int i, n;
		BrokerSubscription * subs;

	CODE:
		AWXS_CLEARERROR

		if ( SvTYPE(SvRV(ST(1))) == SVt_PVAV )
			av = (AV*)SvRV( ST(1) );
		else if ( items > 2 )
			av = av_make ( (items-1), &ST(1) );
		else
			subs = AWXS_BROKERSUBSCRIPTION(1);

		if ( av ) {
			n = av_len ( av ) + 1;

			/* Convert AV into Array of BrokerEvents */

			subs = (BrokerSubscription *)safemalloc ( n * sizeof(BrokerSubscription) );

			for (i=0; i<n; i++) {
				sv = av_fetch ( av, i, 0 );
				subs[i] =* ((BrokerSubscription *)SvIV( *sv ) );
			}
		}

		gErr = self->err
		= (ix)
		  ? awNewSubscriptionsFromStructs ( self->client, n, subs )
		  : awNewSubscriptionFromStruct ( self->client, subs )
		;

		if ( av )
			Safefree ( subs );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;
	
	OUTPUT:
	RETVAL



awaBool
publish ( self, event )
	Aw::Client self
	Aw::Event event

	ALIAS:	
		Aw::Client::publishEvents    = 1
		Aw::Client::setClientInfoset = 2

	PREINIT:
		AV * av = NULL;
		SV ** sv;
		int i, n;
		char * event_type_name;
		BrokerEvent * events;

	CODE:
		AWXS_CLEARERROR

		if ( SvTYPE(SvRV(ST(1))) == SVt_PVAV )
			av = (AV*)SvRV( ST(1) );
		else if ( items > 2 )
			av = av_make ( (items-1), &ST(1) );
		else
			events =& AWXS_BROKEREVENT(1)->event;


		if ( av ) {
			n = av_len ( av ) + 1;

			/* Convert AV into Array of BrokerEvents */

			events = (BrokerEvent *)safemalloc ( n * sizeof(BrokerEvent) );

			for (i=0; i<n; i++) {
				sv = av_fetch ( av, i, 0 );
				events[i] = ((xsBrokerEvent *)SvIV( *sv ) )->event;
			}
		}


		gErr = self->err
		= (ix)
		  ? (ix-1)
		    ? awSetClientInfoset ( self->client, *events )
		    : awPublishEvents ( self->client, n, events )
		  : awPublishEvent ( self->client, *events )
		;

		AWXS_CHECKSETERROR


		if ( !ix && self->err != AW_NO_ERROR ) {
			event_type_name = awGetEventTypeName ( *events );

			self->errMsg = setErrMsg ( &gErrMsg, 3, "Could not publish event %s : %s\n", event_type_name, awErrorToCompleteString ( self->err ) );
			if ( self->Warn || gWarn )
				warn ( gErrMsg );
			free ( event_type_name );
		}

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
		RETVAL

	CLEANUP:
		if ( av )
			Safefree ( events );



awaBool
_publishEventsWithAck ( self, ... )
	Aw::Client self

	ALIAS:
		Aw::Client::_deliverEventsWithAck = 1

	PREINIT:
		int i, n, n_acks, ack_type;
		char * dest_id;
		AV * av = NULL;
		AV * eventsAV;
		AV * ack_seqnAV;
		SV ** sv;
		BrokerLong * ack_seqn;
		BrokerEvent ** events;

	CODE:
		AWXS_CLEARERROR
#if ( AW_VERSION_31 || AW_VERSION_40 )

		if ( ix )
			dest_id = (char *)SvPV ( ST(1), PL_na );
		eventsAV   = (AV*)SvRV( ST(1+ix) );
		ack_type   = (int)SvIV( ST(2+ix) );
		ack_seqnAV = (AV*)SvRV( ST(3+ix) );
		
		n      = av_len ( eventsAV )   + 1;
		n_acks = av_len ( ack_seqnAV ) + 1;
		
		events = (BrokerEvent **) malloc ( n * sizeof (BrokerEvent *) );
		for ( i = 0; i<n; i++ ) {
			sv = av_fetch ( eventsAV, i, 0 );
			events[i] =& ((xsBrokerEvent *)SvIV((SV*)SvRV( *sv )))->event;
		}
		ack_seqn = (BrokerLong *) malloc ( n_acks * sizeof (BrokerLong) );
		for ( i = 0; i<n; i++ ) {
			sv = av_fetch ( ack_seqnAV, i, 0 );
			ack_seqn[i] = awBrokerLongFromString ( longlong_to_string ( SvLLV( *sv ) ) );
		}

		gErr = self->err
		= ( ix )
		  ? awDeliverEventsWithAck ( self->client, dest_id, n, *events, ack_type, n_acks, ack_seqn )
		  : awPublishEventsWithAck ( self->client, n, *events, ack_type, n_acks, ack_seqn )
		;

		AWXS_CHECKSETERROR

		Safefree ( events );
		Safefree ( ack_seqn );


		if ( self->err != AW_NO_ERROR || av == NULL ) {
			if ( av )
				Safefree ( av );

			XSRETURN_UNDEF;
		}
#else
		warn ( "'publishEventsWithAck/deliverEventsWithAck' available in AW v3.1+.  Recompile Aw.xs if you have reached this warning in error.");
		XSRETURN_UNDEF;
#endif /* ( AW_VERSION_31 || AW_VERSION_40 ) */


	OUTPUT:
	RETVAL



AV *
publishRequestAndWaitRef ( self, event, msecs )
	Aw::Client self
	Aw::Event event
	int msecs

	PREINIT:
		int n;
		BrokerEvent * reply_events;

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err = awPublishRequestAndWait ( self->client, event->event, msecs, &n, &reply_events );

		if ( self->err != AW_NO_ERROR ) {
			printf ("%s\n", awErrorToCompleteString ( gErr ) );
			XSRETURN_UNDEF;
		}


		/* now convert reply_events into an AV */
		{
		SV *sv;
		int i;
		xsBrokerEvent * ev;

			RETVAL = newAV();
			for ( i = 0; i<n; i++ ) {
				ev = (xsBrokerEvent *)safemalloc ( sizeof(xsBrokerEvent) );
				if ( ev == NULL ) {
					self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new event" );
#ifdef AWXS_WARNS
					if ( self->Warn )
						warn ( self->errMsg );
#endif /* AWXS_WARNS */
					continue;
				}
				ev->err      = NULL;
				ev->errMsg   = NULL;
				ev->Warn     = gWarn;
				ev->deleteOk = 0;

				ev->event    = reply_events[i];
				
				sv = sv_newmortal();
				sv_setref_pv( sv, "Aw::Event", (void*)ev );
				SvREFCNT_inc(sv);
				av_push( RETVAL, sv );

			}
		}

	OUTPUT:
		RETVAL
	
	CLEANUP:
		SvREFCNT_dec ( RETVAL );



# this could be ALIASed to new
#
Aw::Client
_reconnect ( CLASS, broker_host, broker_name, client_id, ... )
	char * CLASS
	char * broker_host
	char * broker_name
	char * client_id

	PREINIT:
		BrokerConnectionDescriptor myDesc = NULL;

	CODE:
		RETVAL = (xsBrokerClient *)safemalloc ( sizeof(xsBrokerClient) );
		if ( RETVAL == NULL ) {
			setErrMsg ( &gErrMsg, 1, "unable to malloc new client" );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}
		/* initialize the error cleanly */
		RETVAL->err    = AW_NO_ERROR;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;


		if ( broker_name[0] == '\0' )
			broker_name = NULL;

		if ( items == 5 && ( sv_isobject(ST(4)) && (SvTYPE(SvRV(ST(4))) == SVt_PVMG) ) )
			myDesc = AWXS_BROKERCONNECTIONDESC(4)->desc;


		gErr = RETVAL->err = awReconnectBrokerClient(broker_host, broker_name, client_id, myDesc, &RETVAL->client);

		if ( RETVAL->err != AW_NO_ERROR ) {
			setErrMsg ( &gErrMsg, 2, "unable to instantiate new event %s", awErrorToCompleteString ( RETVAL->err ) );
			Safefree ( RETVAL );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

	OUTPUT:
	RETVAL



awaBool
registerCallback ( self, method, ... )
	Aw::Client self
	char * method

	ALIAS:
		Aw::Client::registerConnectionCallback = 1

	PREINIT:
		xsCallBackStruct * cb;

	CODE:
		AWXS_CLEARERROR
		
		cb = (xsCallBackStruct *) malloc ( sizeof (xsCallBackStruct) );
		cb->self   = ST(0);
		cb->data   = (ix) ? ST(2) : Nullsv;
		cb->id     = 0;
		cb->method = strdup ( method );

		gErr = self->err
		= (ix)
		  ? awRegisterClientConnectionCallback ( self->client, BrokerConnectionCallbackFunc, cb )
		  : awRegisterCallback ( self->client, BrokerCallbackFunc, cb )
		;

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



awaBool
registerCallbackForTag ( self, tag, cancel_when_done, method, client_data )
	Aw::Client self
	int tag
	awaBool cancel_when_done
	char * method
	SV * client_data

	PREINIT:
		xsCallBackStruct * cb;

	CODE:
		AWXS_CLEARERROR
		
		cb = (xsCallBackStruct *) malloc ( sizeof (xsCallBackStruct) );
		cb->self   = ST(0);
		cb->data   = client_data;
		cb->id     = tag;
		cb->method = strdup ( method );

		gErr = self->err = awRegisterCallbackForTag ( self->client, tag, cancel_when_done, BrokerCallbackFunc, cb );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



awaBool
registerCallbackForSubId ( self, sub_id, method, client_data )
	Aw::Client self
	int sub_id
	char * method
	SV * client_data

	PREINIT:
		xsCallBackStruct * cb;

	CODE:
		AWXS_CLEARERROR
		
		cb = (xsCallBackStruct *) malloc ( sizeof (xsCallBackStruct) );
		cb->self   = ST(0);
		cb->data   = client_data;
		cb->id     = sub_id;
		cb->method = strdup ( method );

		gErr = self->err = awRegisterCallbackForSubId ( self->client, sub_id, BrokerCallbackFunc, cb );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



awaBool
setClientAutomaticControlLabel ( self, enabled )
	Aw::Client self
	awaBool enabled

	CODE:
		AWXS_CLEARERROR
		
		gErr   = self->err = awSetClientAutomaticControlLabel ( self->client, (BrokerBoolean) enabled );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



awaBool
setStateShareLimit ( self, limit )
	Aw::Client self
	int limit

	CODE:
		AWXS_CLEARERROR
		
		gErr   = self->err = awSetClientStateShareLimit ( self->client, limit );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



Aw::Event
getEventTypeInfoset ( self, event_type_name, infoset_name )
	Aw::Client self
	char * event_type_name
	char * infoset_name

	PREINIT:
		char CLASS[] = "Aw::Event";

	CODE:
		AWXS_CLEARERROR
		
		RETVAL = (xsBrokerEvent *)safemalloc ( sizeof(xsBrokerEvent) );	
		if ( RETVAL == NULL ) {
			self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new event" );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}
		/* initialize the error cleanly */
		RETVAL->err    = NULL;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		gErr = self->err = awGetEventTypeInfoset ( self->client, event_type_name, infoset_name, &RETVAL->event );

		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



AV *
getEventTypeInfosetsRef ( self, event_type_name, infoset_names )
	Aw::Client self
	char *event_type_name
	char ** infoset_names

	PREINIT:
		int n;
		BrokerEvent * events;

	CODE:
		AWXS_CLEARERROR
		
		n = av_len ( (AV*)SvRV( ST(2) ) ) + 1;

		gErr = self->err = awGetEventTypeInfosets ( self->client, event_type_name, &n, infoset_names, &events );

		AWXS_CHECKSETERROR_RETURN

		/* now convert reply_events into an AV */
		{
		SV *sv;
		int i;
		xsBrokerEvent * ev;

			RETVAL = newAV();
			for ( i = 0; i<n; i++ ) {
				ev = (xsBrokerEvent *)safemalloc ( sizeof(xsBrokerEvent) );
				if ( ev == NULL ) {
					self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new event" );
#ifdef AWXS_WARNS
					if ( self->Warn )
						warn ( self->errMsg );
#endif /* AWXS_WARNS */
					continue;
				}
				ev->err      = NULL;
				ev->errMsg   = NULL;
				ev->Warn     = gWarn;
				ev->deleteOk = 0;

				ev->event    = events[i];
				
				sv = sv_newmortal();
				sv_setref_pv( sv, "Aw::Event", (void*)ev );
				SvREFCNT_inc(sv);
				av_push( RETVAL, sv );
			}
		}

	OUTPUT:
		RETVAL

	CLEANUP:
		XS_release_charPtrPtr ( infoset_names );
		SvREFCNT_dec ( RETVAL );




#===============================================================================

MODULE = Aw			PACKAGE = Aw::ConnectionDescriptor

#===============================================================================

#===============================================================================
#  Aw::ConnectionDescriptor
#	::new
#	::DESTROY-A
#
#	::copy
#	::getAccessLabelHint		Java-I 15-84
#	::getAutomaticReconnect		Java-I 15-85
#	::getConnectionShare		Java-I 15-85
#	::getSSLCertificate		Java-I 15-86
#	::getSSLCertificateDns		Java-I 15-87
#	::getSSLCertificateFile		Java-I 15-87
#	::getSSLDistinguishedName	Java-I 15-88
#	::getSSLEncrypted		Java-I 15-88
#	::getSSLEncryptionLevel		Java-I 15-88
#	::getSSLRootDns			Java-I 15-89
#	::getStateShare			Java-I 15-89
#	::setAccessLabelHint		Java-I 15-90
#	::setAutomaticReconnect		Java-I 15-90
#	::setConnectionShare		Java-I 15-91
#	::setSSLCertificate		Java-I 15-91
#	::setSSLEncrypted		Java-I 15-92
#	::setStateShare			Java-I 15-93
#	::toString-A			Java-I 15-93
#
#       ::err-A   			ala Mysql::
#       ::errmsg-A			ala Mysql::
#       ::error-A
#===============================================================================



Aw::ConnectionDescriptor
new ( CLASS )
	char * CLASS

	CODE:
		RETVAL = (xsBrokerConnectionDescriptor *)safemalloc ( sizeof(xsBrokerConnectionDescriptor) );

		if ( RETVAL == NULL ) {
			setErrMsg ( &gErrMsg, 1, "unable to malloc new connection descriptor" );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

		/* initialize the error cleanly */
		RETVAL->err    = AW_NO_ERROR;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		RETVAL->desc = awNewBrokerConnectionDescriptor ();

	OUTPUT:
	RETVAL



Aw::ConnectionDescriptor
copy ( self )
	Aw::ConnectionDescriptor self

	PREINIT:
		char CLASS[] = "Aw::TypeDef";

	CODE:
		AWXS_CLEARERROR

		RETVAL = (xsBrokerConnectionDescriptor *)safemalloc ( sizeof(xsBrokerConnectionDescriptor) );

		if ( RETVAL == NULL ) {
			self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new connection descriptor copy" );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

		/* initialize the error cleanly */
		RETVAL->err    = AW_NO_ERROR;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		RETVAL->desc = awCopyDescriptor ( self->desc );

	OUTPUT:
	RETVAL



char *
getAccessLabelHint ( self )
	Aw::ConnectionDescriptor self

	CODE:
		AWXS_CLEARERROR

		gErr = self->err = awGetDescriptorAccessLabelHint ( self->desc, &RETVAL );

		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



# 
#   hrm, maybe this should be an HV*?
# 
AV *
getSSLCertificateRef ( self )
	Aw::ConnectionDescriptor self

	PREINIT:
		char * certificate_file;
		char * distinguished_name;

	CODE:
		AWXS_CLEARERROR

		gErr = self->err = awGetDescriptorSSLCertificate ( self->desc, &certificate_file, &distinguished_name );

		AWXS_CHECKSETERROR_RETURN

		{
		SV *sv;
		RETVAL = newAV();
			
			sv = newSVpv( certificate_file, 0 );
			av_push( RETVAL, sv );

			sv = newSVpv( distinguished_name, 0 );
			av_push( RETVAL, sv );
		}

	OUTPUT:
		RETVAL
	
	CLEANUP:
		SvREFCNT_dec ( RETVAL );
		free ( certificate_file );
		free ( distinguished_name );



char *
getSSLCertificateFile ( self )
	Aw::ConnectionDescriptor self

	PREINIT:
		char * distinguished_name;

	CODE:
		AWXS_CLEARERROR

		gErr = self->err = awGetDescriptorSSLCertificate ( self->desc, &RETVAL, &distinguished_name );

		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
		RETVAL

	CLEANUP:
		free ( distinguished_name );



char *
getSSLDistinguishedName ( self )
	Aw::ConnectionDescriptor self

	PREINIT:
		char * certificate_file;

	CODE:
		AWXS_CLEARERROR

		gErr = self->err = awGetDescriptorSSLCertificate ( self->desc, &certificate_file, &RETVAL );

		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
		RETVAL

	CLEANUP:
		free ( certificate_file );



int
getSSLEncryptionLevel ( self )
	Aw::ConnectionDescriptor self

	CODE:
		AWXS_CLEARERROR

		RETVAL = awGetSSLEncryptionLevel ();

	OUTPUT:
	RETVAL



AV *
getSSLCertificateDnsRef ( self, certificate_file, password )
	Aw::ConnectionDescriptor self
	char *certificate_file
	char *password

	ALIAS:
		Aw::ConnectionDescriptor::getSSLRootDnsRef = 1

	PREINIT:
		int n;
		char ** distinguished_names;

	CODE:
		AWXS_CLEARERROR

		gErr = self->err
		= (ix)
		  ? awGetSSLRootDns ( certificate_file, password, &n, &distinguished_names )
		  : awGetSSLCertificateDns ( certificate_file, password, &n, &distinguished_names )
		;


		AWXS_CHECKSETERROR_RETURN

		{
		SV *sv;
		int i;
			RETVAL = newAV();
			sv = newSViv( n );
			av_push( RETVAL, sv );

			for ( i = 0; i<n; i++ ) {
				sv = newSVpv( distinguished_names[i], 0 );
				av_push( RETVAL, sv );
			}
		}

	OUTPUT:
		RETVAL
	
	CLEANUP:
		SvREFCNT_dec ( RETVAL );
		free ( distinguished_names );



awaBool
getStateShare ( self )
	Aw::ConnectionDescriptor self

	ALIAS:
		Aw::ConnectionDescriptor::getSSLEncrypted       = 1
		Aw::ConnectionDescriptor::getAutomaticReconnect = 2
		Aw::ConnectionDescriptor::getConnectionShare    = 3

	PREINIT:
		BrokerBoolean bRV;

	CODE:
		AWXS_CLEARERROR

		gErr = self->err 
		= (ix>=2)
		  ? (ix-2)
	        ? awGetDescriptorConnectionShare ( self->desc, &bRV )           // 3
		    : awGetDescriptorAutomaticReconnect ( self->desc, &bRV )    // 2
		  : (ix)
		    ? awGetDescriptorSSLEncrypted ( self->desc, &bRV )          // 1
		    : awGetDescriptorStateShare ( self->desc, &bRV )            // 0
		;

		AWXS_CHECKSETERROR

		RETVAL = (awaBool)bRV;

	OUTPUT:
	RETVAL



awaBool
setAccessLabelHint ( self, hint )
	Aw::ConnectionDescriptor self
	char * hint

	CODE:
		AWXS_CLEARERROR

		gErr = self->err = awSetDescriptorAccessLabelHint ( self->desc, hint );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



awaBool
setSSLCertificate ( self, certificate_file, password, distinguished_name )
	Aw::ConnectionDescriptor self
	char *certificate_file
	char *password
	char *distinguished_name

	CODE:
		AWXS_CLEARERROR

		gErr = self->err = awSetDescriptorSSLCertificate ( self->desc, certificate_file, password, distinguished_name );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



awaBool
setStateShare ( self, value )
	Aw::ConnectionDescriptor self
	awaBool value

	ALIAS:
		Aw::ConnectionDescriptor::setSSLEncrypted       = 1
		Aw::ConnectionDescriptor::setAutomaticReconnect = 2
		Aw::ConnectionDescriptor::setConnectionShare    = 3

	CODE:
		AWXS_CLEARERROR

		gErr = self->err
		= (ix>=2)
		  ? (ix-2)
		    ? awSetDescriptorConnectionShare ( self->desc, (BrokerBoolean)value )
		    : awSetDescriptorAutomaticReconnect ( self->desc, (BrokerBoolean)value )
		  : (ix)
		    ? awSetDescriptorSSLEncrypted ( self->desc, (BrokerBoolean)value )
		    : awSetDescriptorStateShare ( self->desc, (BrokerBoolean)value )
		;

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



char *
getSharedEventOrdering ( self )
	Aw::ConnectionDescriptor self

	CODE:
		AWXS_CLEARERROR
#if ( AW_VERSION_31 || AW_VERSION_40 )

		gErr = self->err = awGetDescriptorSharedEventOrdering ( self->desc, &RETVAL );

		AWXS_CHECKSETERROR_RETURN
#else
		warn ( "'getBrokerVersionNumber' available in AW v3.1+.  Recompile Aw.xs if you have reached this warning in error.");
		XSRETURN_UNDEF;
#endif /* ( AW_VERSION_31 || AW_VERSION_40 ) */

	OUTPUT:
	RETVAL



awaBool
setSharedEventOrdering ( self, ordering )
	Aw::ConnectionDescriptor self
	char * ordering

	CODE:
		AWXS_CLEARERROR
#if ( AW_VERSION_31 || AW_VERSION_40 )
		gErr = self->err = awSetDescriptorSharedEventOrdering ( self->desc, ordering );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;
#else
		warn ( "'getBrokerVersionNumber' available in AW v3.1+.  Recompile Aw.xs if you have reached this warning in error.");
		XSRETURN_UNDEF;
#endif /* ( AW_VERSION_31 || AW_VERSION_40 ) */

	OUTPUT:
	RETVAL


#===============================================================================

MODULE = Aw			PACKAGE = Aw::Date

#===============================================================================

#===============================================================================
#  Aw::Date
#	::new
#	::DESTROY-A
#
#	::clear				Java-I 15-96
#	::clearDate			   C
#	::clearTime			Java-I 15-96
#	::compareTo			Java-I 15-97
#	::equals-A			Java-I 15-97
#	::setDate			Java-I 15-99
#	::setDateCtime			(Not in Java API)
#	::setDateTime			Java-I 15-145
#	::setTime			Java-I 15-100
#	::toString-A			Java-I 15-100
#===============================================================================



Aw::Date
new ( CLASS )
	char * CLASS

	CODE:
		if ( items == 1 )
			RETVAL = awNewEmptyBrokerDate ();
		else {
			int yr = (int)SvIV( ST(1) );
			int mo = (int)SvIV( ST(2) );
			int dy = (int)SvIV( ST(3) );
			int hr = (int)SvIV( ST(4) );
			int m  = (int)SvIV( ST(5) );
			int s  = (int)SvIV( ST(6) );
			int ms = (int)SvIV( ST(7) );
			RETVAL = awNewBrokerDate ( yr, mo, dy, hr, m, s, ms );
		}

	OUTPUT:
	RETVAL



void
clear ( self )
	Aw::Date self

	ALIAS:
		Aw::Date::clearDate = 1
		Aw::Date::clearTime = 2

	CODE:
		if (ix < 2)
			awClearDate ( self );
		else if ( ix != 1 )
			awClearTime ( self );



int
compareTo ( self, date )
	Aw::Date self
	Aw::Date date

	ALIAS:
		Aw::Date::equals = 1

	CODE:
		RETVAL = awCompareDate ( self, date );
		if (ix) {
			if ( RETVAL == 0 ) {
				RETVAL = 1;  /* awaTrue */
			} else {
				RETVAL = 0;  /* awaFalse */
			}
		}

	OUTPUT:
	RETVAL



time_t
getDateCtime ( self )
	Aw::Date self

	CODE:
		gErr = awGetDateCtime ( self, &RETVAL );
	
		if ( gErr != AW_NO_ERROR )
			XSRETURN_UNDEF;

	OUTPUT:
	RETVAL



void
setDate ( self, yr, mo, dy )
	Aw::Date self
	int yr
	int mo
	int dy

	CODE:
		awSetDate ( self, yr, mo, dy );



void
setDateCtime ( self, t )
	Aw::Date self
	time_t t

	CODE:
		awSetDateCtime ( self, t );



void
setDateTime ( self, yr, mo, dy, hr, m, s, ms )
	Aw::Date self
	int yr
	int mo
	int dy
	int hr
	int m
	int s
	int ms

	CODE:
		awSetDateTime ( self, yr, mo, dy, hr, m, s, ms );



void
setTime ( self,  hr, m, s, ms )
	Aw::Date self
	int hr
	int m
	int s
	int ms

	CODE:
		awSetTime ( self, hr, m, s, ms );



#===============================================================================

MODULE = Aw			PACKAGE = Aw::Error

#===============================================================================

#===============================================================================
#  Aw::Error
#	::new
#	::DESTROY-A
#
#	::getCode			Java-I 15-147
#	::getMinorCode-A		Java-I 15-148
#	::toString-A			Java-I 15-149
#	::toCompleteString		Java-I 15-149
#	::delete			C CADK  6-54
#	::last
#	::setCurrent
#
#       ::err-A   			ala Mysql::
#       ::errmsg-A			ala Mysql::
#===============================================================================



Aw::Error
new ( CLASS )
	char * CLASS

	ALIAS:
		Aw::Error::last = 1

	CODE:
		RETVAL = (xsBrokerError *)safemalloc ( sizeof(xsBrokerError) );

		if ( RETVAL == NULL ) {
			setErrMsg ( &gErrMsg, 1, "unable to malloc new error" );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

		/* initialize the error cleanly */
		RETVAL->err    = (ix) ? awCopyError ( gErr ) : NULL;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

	OUTPUT:
	RETVAL



int
getCode ( ... )

	ALIAS:	
		Aw::Error::getMinorCode = 1

	CODE:
		RETVAL
		= (ix)
		  ? (items)
		    ? awGetErrorMinorCode ( AWXS_BROKERERROR(0)->err )
		    : awGetErrorMinorCode ( gErr )

		  : (items)
		    ? awGetErrorCode ( AWXS_BROKERERROR(0)->err )
		    : awGetErrorCode ( gErr )
		;
	
	OUTPUT:
	RETVAL



void
delete ( self )
	Aw::Error self

	CODE:
		awDeleteError ( self->err );



int
getDiagnostics ( self )
	Aw::Error self

	CODE:
		RETVAL = awGetDiagnostics();

	OUTPUT:
	RETVAL



void
setCurrent ( self, ... )
	Aw::Error self

	CODE:
		if ( items == 2 ) {
			awDeleteError ( self->err );
			self->err = awCopyError ( AWXS_BROKERERROR(1)->err );
		}

		if ( self->err == NULL )
			return;

		awSetCurrentError ( self->err );
		gErr = self->err;



void
setDiagnostics ( self, diag )
	Aw::Error self
	int diag

	CODE:
		awSetDiagnostics ( diag );



char *
toCompleteString ( ... )

	CODE:
		RETVAL
		= (items)
		  ? awErrorToCompleteString ( AWXS_BROKERERROR(0)->err )
		  : awErrorToCompleteString ( gErr )
		;
	
	
	OUTPUT:
	RETVAL



#===============================================================================

MODULE = Aw			PACKAGE = Aw::Event

#===============================================================================

#===============================================================================
#  Aw::Event
#	::new
#	::DESTROY-A
#
#	::clear 			Java-I 15-103
#	::clearField			Java-I 15-104
#	::getBaseName			Java-I 15-110
#	::getBooleanField		Java-I 15-110
#	::getByteField			Java-I 15-111
#	::getCharField			Java-I 15-111
#	::getClient			Java-I 15-111
#	::getDateField			Java-I 15-111  
#	::getDoubleField		Java-I 15-111
#	::getEventId			Java-I 15-112
#	::getField			Java-I 15-112
#	::getFieldNames			Java-I 15-113
#	::getFieldType-A		Java-I 15-113
#	::getFloatField			Java-I 15-114
#	::getStringField		Java-I 15-118
#	::getSubscriptionIds		Java-I 15-121
#	::getTag 			Java-I 15-121
#	::getTypeDef			Java-I 15-122
#	::getTypeName			Java-I 15-122
#	::getBaseName-A			     C
#	::getFamilyName-A		     C
#	::getScopeName-A		     C
#	::getUCCharField		Java-I 15-122
#	::getUCStringField		Java-I 15-122
#
#	::isAckReply			Java-I 15-123
#	::isErrorReply			Java-I 15-123
#	::isFieldSet			Java-I 15-124
#	::isLastReply			Java-I 15-124
#	::isNullReply			Java-I 15-124
#
#	::setBooleanField
#	::setByteField
#	::setCharField
#	::setDateField 			Java-I 15-125
#	::setDoubleField
#	::setField			Java-I 15-130
#	::setFloatField
#	::setIntegerField
#	::setLongField			Java-I 15-133
#	::setShortField
#	::setStringField		Java-I 15-138
#	::setStringFieldToSubstring
#	::setUCCharField
#	::setUCStringField
#	::setUCStringFieldToSubstring
#	::setTag 			Java-I 15-142
#
#	::toFormattedString		Java-I 15-145
#	::toString-A			Java-I 15-145
#
#       ::err-A   			ala Mysql::
#       ::errmsg-A			ala Mysql::
#	::error-A
#===============================================================================



Aw::Event
_new ( CLASS, client, event_type_name, ... )
	char * CLASS
	Aw::Client client
	char * event_type_name


	CODE:
		RETVAL = (xsBrokerEvent *)safemalloc ( sizeof(xsBrokerEvent) );

		if ( RETVAL == NULL ) {
			setErrMsg ( &gErrMsg, 1, "unable to malloc new event" );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

		/* initialize the error cleanly */
		RETVAL->err    = AW_NO_ERROR;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		gErr = RETVAL->err = awNewBrokerEvent ( client->client, event_type_name, &RETVAL->event );

		AWXS_CHECKSETERROR_RETURN

		if ( items == 4 )
		  {
			HV * hv;

    			if( SvROK(ST(3)) && (SvTYPE(SvRV(ST(3))) == SVt_PVHV) )
			        hv = (HV*)SvRV( ST(3) );
			    else {
			        warn( "Aw::Event::new() -- hv is not an HV reference" );
			        XSRETURN_UNDEF;
			    };

			gErr = RETVAL->err = awxsSetEventFromHash ( RETVAL->event, hv );
		  }

		if ( RETVAL->err != AW_NO_ERROR ) {
			setErrMsg ( &gErrMsg, 2, "unable to instantiate new event: %s", awErrorToCompleteString ( RETVAL->err ) );
			Safefree ( RETVAL );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

	OUTPUT:
	RETVAL



awaBool
clear ( self )
	Aw::Event self

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err = awClearEvent ( self->event );

		AWXS_CHECKSETERROR_RETURN

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



awaBool
clearField ( self, field_name )
	Aw::Event self
	char * field_name

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err = awClearEventField ( self->event, field_name );

		AWXS_CHECKSETERROR_RETURN

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



void
delete ( self )
	Aw::Event self

	CODE:
		awDeleteEvent ( self->event );



Aw::Event
fromBinData ( self, client, data, size )
	Aw::Event self
	Aw::Client client
	char * data
	int size

	PREINIT:
		char CLASS[] = "Aw::Event";

	CODE:
		AWXS_CLEARERROR
		
		RETVAL = (xsBrokerEvent *)safemalloc ( sizeof(xsBrokerEvent) );	
		if ( RETVAL == NULL ) {
			self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new event" );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}
		/* initialize the error cleanly */
		RETVAL->err    = NULL;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		gErr = self->err =  awEventFromBinData ( client->client, data, size, &RETVAL->event );

		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



awaBool
getBooleanField ( self, field_name )
	Aw::Event self
	char * field_name

	PREINIT:
		BrokerBoolean bRV;

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err = awGetBooleanField ( self->event, field_name, &bRV );

		AWXS_CHECKSETERROR_RETURN

		RETVAL = (awaBool)bRV;

	OUTPUT:
	RETVAL



char
getByteField ( self, field_name )
	Aw::Event self
	char * field_name

	ALIAS:
		Aw::Event::getCharField = 1

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err
		= (ix)
		  ? awGetCharField ( self->event, field_name, &RETVAL )
		  : awGetByteField ( self->event, field_name, &RETVAL )
		;
		
		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



Aw::Client
getClient ( self )
	Aw::Event self

	PREINIT:
		char CLASS[] = "Aw::Client";

	CODE:
		AWXS_CLEARERROR
		
		RETVAL = (xsBrokerClient *)safemalloc ( sizeof(BrokerClient) );
		if ( RETVAL == NULL ) {
			self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new date" );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}
		/* initialize the error cleanly */
		RETVAL->err    = NULL;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		gErr = self->err = awGetEventClient ( self->event, &RETVAL->client );

		AWXS_CHECKSETERROR

		if ( RETVAL == NULL ) {
			Safefree ( RETVAL );
			XSRETURN_UNDEF;
		}

	OUTPUT:
	RETVAL



Aw::Date
getDateField ( self, field_name )
	Aw::Event self
	char * field_name

	PREINIT:
		char CLASS[] = "Aw::Date";

	CODE:
		AWXS_CLEARERROR
		
		RETVAL = (BrokerDate *)safemalloc ( sizeof(BrokerDate) );
		if ( RETVAL == NULL ) {
			self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new date" );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

		gErr = self->err = awGetDateField ( self->event, field_name, RETVAL );

		if ( self->err != AW_NO_ERROR ) {
			sv_setpv ( perl_get_sv("@",0), awErrorToCompleteString ( gErr ) );
			Safefree ( RETVAL );
			XSRETURN_UNDEF;
		}

	OUTPUT:
	RETVAL



double
getDoubleField ( self, field_name )
	Aw::Event self
	char * field_name

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err = awGetDoubleField ( self->event, field_name, &RETVAL );
		
		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



CORBA::LongLong
getEventId ( self )
	Aw::Event self

	ALIAS:
		Aw::Event::getReceiptSequenceNumber = 1

	PREINIT:
		BrokerLong blValue;
		char blString[24];
		
	CODE:
		AWXS_CLEARERROR
		

		blValue
		= (ix)
		  ? awGetEventReceiptSequenceNumber ( self->event )
		  : awGetEventId ( self->event )
		;

		RETVAL = longlong_from_string ( awBrokerLongToString( blValue, blString ) );

	OUTPUT:
	RETVAL



SV *
getFieldRef ( self, field_name )
	Aw::Event self
	char * field_name


	CODE:
		AWXS_CLEARERROR
		
		RETVAL = getSV ( self->event, field_name );

		if ( RETVAL == Nullsv ) {
			// gErr = self->err = getEventToHashErr(); 
			AWXS_CHECKSETERROR_RETURN
		}

	OUTPUT:
	RETVAL



float
getFloatField ( self, field_name )
	Aw::Event self
	char * field_name

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err = awGetFloatField ( self->event, field_name, &RETVAL );
		
		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



char **
getFieldNamesRef ( self, ... )

	ALIAS:
		Aw::TypeDef::getFieldNamesRef = 1

	PREINIT:
		int count_charPtrPtr;
		char *  field_name = NULL;

	CODE:
		
		if ( items == 2 )
			field_name = (char *)SvPV ( ST(1), PL_na );

		if ( ix ) {
			xsBrokerTypeDef * self = AWXS_BROKERTYPEDEF(0);
			AWXS_CLEARERROR
			gErr
			= self->err
			= awGetTypeDefFieldNames ( self->type_def, field_name, &count_charPtrPtr, &RETVAL );
		} else {
			xsBrokerEvent * self = AWXS_BROKEREVENT(0);
			AWXS_CLEARERROR
			gErr
			= self->err
			= awGetFieldNames ( self->event, field_name, &count_charPtrPtr, &RETVAL );
		}

	
		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



int
getIntegerField ( self, field_name )
	Aw::Event self
	char * field_name

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err = awGetIntegerField ( self->event, field_name, &RETVAL );
		
		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



CORBA::LongLong
getLongField ( self, field_name )
	Aw::Event self
	char * field_name

	PREINIT:
		BrokerLong blValue;
		char blString[24];
		
	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err = awGetLongField ( self->event, field_name, &blValue );

		RETVAL = longlong_from_string ( awBrokerLongToString( blValue, blString ) );
		
		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



CORBA::LongLong
getPublishSequenceNumber ( self )
	Aw::Event self

	PREINIT:
		BrokerLong blValue;
		char blString[24];

	CODE:
		AWXS_CLEARERROR
		
		blValue = awGetEventPublishSequenceNumber ( self->event );
		RETVAL  = longlong_from_string ( awBrokerLongToString( blValue, blString ) );

	OUTPUT:
	RETVAL



int
getSequenceFieldSize ( self, field_name )
	Aw::Event self
	char * field_name

	CODE:
		gErr = self->err = awGetSequenceFieldSize ( self->event, field_name, &RETVAL );

		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



SV *
getSequenceFieldRef ( self, field_name, ... )
	Aw::Event self
	char * field_name

	ALIAS:
		Aw::Event::getBooleanSeqFieldRef  = FIELD_TYPE_BOOLEAN
		Aw::Event::getByteSeqFieldRef     = FIELD_TYPE_BYTE
		Aw::Event::getCharSeqFieldRef     = FIELD_TYPE_CHAR
		Aw::Event::getDateSeqFieldRef     = FIELD_TYPE_DATE
		Aw::Event::getDoubleSeqFieldRef   = FIELD_TYPE_DOUBLE
		Aw::Event::getFloatSeqFieldRef    = FIELD_TYPE_FLOAT
		Aw::Event::getIntegerSeqFieldRef  = FIELD_TYPE_INT
		Aw::Event::getLongSeqFieldRef     = FIELD_TYPE_LONG
		Aw::Event::getShortSeqFieldRef    = FIELD_TYPE_SHORT
		Aw::Event::getStringSeqFieldRef   = FIELD_TYPE_STRING
		Aw::Event::getUCCharSeqFieldRef   = FIELD_TYPE_UNICODE_CHAR
		Aw::Event::getUCStringSeqFieldRef = FIELD_TYPE_UNICODE_STRING

	PREINIT:
		int offset = 0;
		int max_n  = AW_ENTIRE_SEQUENCE;

	CODE:
		AWXS_CLEARERROR
		
		if ( items >= 3 )
			offset = (int)SvIV ( ST(2) );
		if ( items == 4 )
			max_n  = (int)SvIV ( ST(3) );

		RETVAL = getAVN ( self->event, field_name, offset, max_n );

		if ( RETVAL == Nullsv ) {
			// gErr = self->err = getEventToHashErr(); 
			AWXS_CHECKSETERROR_RETURN
		}

	OUTPUT:
	RETVAL



short
getShortField ( self, field_name )
	Aw::Event self
	char * field_name

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err = awGetShortField ( self->event, field_name, &RETVAL );
		
		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



####################################################################
#
#  Yet another style for working with multiple classes:
#    Using cases, class definition is specified in INPUT
# 
#  My least preferred method, the cases can not share common code. 
# 
####################################################################
char *
getStringField ( self, field_name )

	CASE:	ix == 1
		ALIAS:
			Aw::Adapter::getStringField = 1

		INPUT:  # could break in future if not in INPUT
			Aw::Adapter self;
			char * field_name;

		PREINIT:
			awaBool test;

		CODE:
			AWXS_CLEARERROR
		
			test = awAdapterGetStringField ( self->handle, field_name, &RETVAL );
		
			if ( test == awaFalse )
				XSRETURN_UNDEF;

		OUTPUT:
		RETVAL

	CASE:	ix == 2
		ALIAS:
			Aw::Util::getStringField = 2

		INPUT:
			Aw::Util self;
			char * field_name;

		PREINIT:
			awaBool test;

		CODE:
			AWXS_CLEARERROR
		
			test = awAdapterGetStringField ( self->handle, field_name, &RETVAL );
		
			if ( test == awaFalse )
				XSRETURN_UNDEF;

		OUTPUT:
		RETVAL

	CASE:
		INPUT:
			Aw::Event self;
			char * field_name;

		CODE:
			AWXS_CLEARERROR
		
			gErr = self->err = awGetStringField ( self->event, field_name, &RETVAL );

			AWXS_CHECKSETERROR_RETURN

		OUTPUT:
		RETVAL



Aw::Event
getStructFieldAsEvent ( self, field_name )
	Aw::Event self
	char * field_name

	PREINIT:
		char CLASS[] = "Aw::Event";

	CODE:
		AWXS_CLEARERROR
		
		RETVAL = (xsBrokerEvent *)safemalloc ( sizeof(xsBrokerEvent) );	
		if ( RETVAL == NULL ) {
			self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new event" );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}
		/* initialize the error cleanly */
		RETVAL->err    = NULL;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		gErr = self->err = awGetStructFieldAsEvent ( self->event, field_name, &RETVAL->event );

		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



AV *
getStructSeqFieldAsEventsRef ( self, field_name, offset, ... )
	Aw::Event self
	char * field_name
	int offset

	PREINIT:
		int n;
		int max_n = AW_ENTIRE_SEQUENCE;
		BrokerEvent * events;

	CODE:
		AWXS_CLEARERROR
		
		if ( items == 4 )
			max_n = (int)SvIV( ST(3) );

		gErr = self->err = awGetStructSeqFieldAsEvents ( self->event, field_name, offset, max_n, &n, &events );

		AWXS_CHECKSETERROR_RETURN

		/* now convert reply_events into an AV */
		{
		SV *sv;
		int i;
		xsBrokerEvent * ev;

			RETVAL = newAV();
			for ( i = 0; i<n; i++ ) {
				ev = (xsBrokerEvent *)safemalloc ( sizeof(xsBrokerEvent) );
				if ( ev == NULL ) {
					self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new event" );
#ifdef AWXS_WARNS
					if ( self->Warn )
						warn ( self->errMsg );
#endif /* AWXS_WARNS */
					continue;
				}
				ev->err      = NULL;
				ev->errMsg   = NULL;
				ev->Warn     = gWarn;
				ev->deleteOk = 0;

				ev->event    = events[i];
				
				sv = sv_newmortal();
				sv_setref_pv( sv, "Aw::Event", (void*)ev );
				SvREFCNT_inc(sv);
				av_push( RETVAL, sv );
			}
		}

	OUTPUT:
		RETVAL
	
	CLEANUP:
		SvREFCNT_dec ( RETVAL );



AV *
getSubscriptionIdsRef ( self )
	Aw::Event self

	PREINIT:
		int n, *ints;

	CODE:
		AWXS_CLEARERROR

		ints = awGetSubscriptionIds ( self->event, &n );

		if ( ints == NULL ) {
			self->errMsg
			= ( n )
			  ? setErrMsg ( &gErrMsg, 1, "Event was created locally." )
			  : setErrMsg ( &gErrMsg, 1, "Event was delivered by broker.  Delivered events are not matched to subscriptions." )
			;
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */

			XSRETURN_UNDEF;
		}

		{
		SV *sv;
		int i;
			RETVAL = newAV();
			for ( i = 0; i<n; i++ ) {
				sv = newSViv( ints[i] );
				av_push( RETVAL, sv );
			}
		}

	OUTPUT:
		RETVAL
	
	CLEANUP:
		SvREFCNT_dec ( RETVAL );
		free ( ints );



int
getTag ( self )
	Aw::Event self

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err = awGetEventTag ( self->event, &RETVAL );
		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



Aw::TypeDef
getTypeDef ( self )
	Aw::Event self

	PREINIT:
		char CLASS[] = "Aw::TypeDef";

	CODE:
		AWXS_CLEARERROR
		
		RETVAL = (xsBrokerTypeDef *)safemalloc ( sizeof(xsBrokerTypeDef) );
		if ( RETVAL == NULL ) {
			self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new type def" );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}
		/* initialize the error cleanly */
		RETVAL->err    = AW_NO_ERROR;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		gErr = self->err = awGetTypeDefFromEvent ( self->event, &RETVAL->type_def );
		if ( self->err != AW_NO_ERROR ) {
			Safefree ( RETVAL );
			XSRETURN_UNDEF;
		}

	OUTPUT:
	RETVAL



char *
getTypeName ( self )
	Aw::Event self

	ALIAS:
		Aw::Event::getBaseName   = 1
		Aw::Event::getFamilyName = 2
		Aw::Event::getScopeName  = 3

	CODE:
		AWXS_CLEARERROR
		
		RETVAL
		= (ix>=2)
		  ? (ix-2)
		    ? awGetEventTypeScopeName ( self->event )
#ifdef AW_COMPATIBLE
		    : awGetEventTypeFamilyName ( self->event )
#else
		    : NULL
#endif /* AW_COMPATIBLE */
		  : (ix)
		    ? awGetEventTypeBaseName ( self->event)
		    : awGetEventTypeName ( self->event )
		;

	OUTPUT:
	RETVAL



char *
getUCStringField ( self, field_name )
	Aw::Event self
	char * field_name


	ALIAS:
		Aw::Event::getUCStringFieldAsA = 1

	CODE:
		AWXS_CLEARERROR
		
		if ( ix ) {
#if ( AW_VERSION_31 || AW_VERSION_40 )
			gErr = self->err = awGetUCStringFieldAsA ( self->event, field_name, &RETVAL );
#else
			warn ( "'getUCStringFieldAsA' available in AW v3.1+.  Recompile Aw.xs if you have reached this warning in error.");
			XSRETURN_UNDEF;
#endif /* ( AW_VERSION_31 || AW_VERSION_40 ) */
		} else {
			gErr = self->err = awGetUCStringFieldAsUTF8 ( self->event, field_name, &RETVAL );
		}
		
		if ( self->err != AW_NO_ERROR ) {
			sv_setpv ( perl_get_sv("@",0), awErrorToCompleteString ( gErr ) );
			Safefree ( RETVAL );
			XSRETURN_UNDEF;
		}

	OUTPUT:
	RETVAL



char *
getUCCharField ( self, field_name )
	Aw::Event self
	char * field_name

	PREINIT:
		charUC uc[2];

	CODE:
		AWXS_CLEARERROR

		uc[0] = uc[1] = (charUC)NULL;
		
		gErr = self->err = awGetUCCharField ( self->event, field_name, &uc[0] );
		
		AWXS_CHECKSETERROR_RETURN

		RETVAL = awUCtoUTF8 ( uc );

	OUTPUT:
	RETVAL



awaBool
isFieldSet ( self, field_name )
	Aw::Event self
	char * field_name

	PREINIT:
		BrokerBoolean is_set;

	CODE:
		AWXS_CLEARERROR
		
		gErr = self->err = awIsEventFieldSet ( self->event, field_name, &is_set );

		AWXS_CHECKSETERROR_RETURN

		RETVAL = ( is_set ) ? awaTrue : awaFalse ;

	OUTPUT:
	RETVAL



awaBool
isAckReply ( self )
	Aw::Event self

	ALIAS:
		Aw::Event::isErrorReply = 1
		Aw::Event::isLastReply  = 2
		Aw::Event::isNullReply  = 3

	CODE:
		AWXS_CLEARERROR

		RETVAL
		= (ix>=2)
		  ? (ix-2)
		    ? awIsNullReplyEvent ( self->event )
		    : awIsLastReplyEvent ( self->event )
		  : (ix)
		    ? awIsErrorReplyEvent ( self->event )
		    : awIsAckReplyEvent ( self->event )
		;

	OUTPUT:
	RETVAL



awaBool
_setField ( self, field_name, value )
	Aw::Event self
	char * field_name

	ALIAS:
		Aw::Event::setBooleanField  = FIELD_TYPE_BOOLEAN
		Aw::Event::setByteField     = FIELD_TYPE_BYTE
		Aw::Event::setCharField     = FIELD_TYPE_CHAR
		Aw::Event::setDateField     = FIELD_TYPE_DATE
		Aw::Event::setDoubleField   = FIELD_TYPE_DOUBLE
		Aw::Event::setFloatField    = FIELD_TYPE_FLOAT
		Aw::Event::setIntegerField  = FIELD_TYPE_INT
		Aw::Event::setLongField     = FIELD_TYPE_LONG
		Aw::Event::setShortField    = FIELD_TYPE_SHORT
		Aw::Event::setStringField   = FIELD_TYPE_STRING
		Aw::Event::setUCCharField   = FIELD_TYPE_UNICODE_CHAR
		Aw::Event::setUCStringField = FIELD_TYPE_UNICODE_STRING

	PREINIT:
		short field_type = ix ;

	CODE:
		AWXS_CLEARERROR


		if ( !ix )
			gErr = self->err = awGetEventFieldType ( self->event, field_name, &field_type );

		if ( gErr == AW_NO_ERROR )
			gErr = self->err = awxsSetField ( self->event, field_name, field_type, ST(2), NULL, NULL );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



awaBool
setUCStringFieldAsA ( self, field_name, value )
	Aw::Event self
	char * field_name
	char * value

	CODE:
		AWXS_CLEARERROR
#if ( AW_VERSION_31 || AW_VERSION_40 )

		gErr = self->err = awSetUCStringFieldAsA( self->event, field_name, value);

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;
#else
		warn ( "'setUCSTringFieldAsA' available in AW v3.1+.  Recompile Aw.xs if you have reached this warning in error.");
		XSRETURN_UNDEF;
#endif /* ( AW_VERSION_31 || AW_VERSION_40 ) */

	OUTPUT:
	RETVAL



awaBool
setPublishSequenceNumber ( self, seqn )
	Aw::Event self
	CORBA::LongLong seqn

	PREINIT:
		BrokerLong blValue;

	CODE:
		AWXS_CLEARERROR
		
		blValue = awBrokerLongFromString ( longlong_to_string ( seqn ) );
		gErr = self->err = awSetEventPublishSequenceNumber ( self->event, blValue );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



awaBool
setSequenceField ( self, field_name, ... )
	Aw::Event self
	char * field_name

	ALIAS:
		Aw::Event::setBooleanSeqField  = FIELD_TYPE_BOOLEAN
		Aw::Event::setByteSeqField     = FIELD_TYPE_BYTE
		Aw::Event::setCharSeqField     = FIELD_TYPE_CHAR
		Aw::Event::setDateSeqField     = FIELD_TYPE_DATE
		Aw::Event::setDoubleSeqField   = FIELD_TYPE_DOUBLE
		Aw::Event::setFloatSeqField    = FIELD_TYPE_FLOAT
		Aw::Event::setIntegerSeqField  = FIELD_TYPE_INT
		Aw::Event::setLongSeqField     = FIELD_TYPE_LONG
		Aw::Event::setShortSeqField    = FIELD_TYPE_SHORT
		Aw::Event::setStringSeqField   = FIELD_TYPE_STRING
		Aw::Event::setUCCharSeqField   = FIELD_TYPE_UNICODE_CHAR
		Aw::Event::setUCStringSeqField = FIELD_TYPE_UNICODE_STRING

	PREINIT:
		short field_type;
		int src_offset  = 0;
		int dest_offset = 0;
		SV ** sv;
		AV  * av;
		int startArray = 2;  /* generally as the 3rd arguement */
		void * value;

	CODE:
		AWXS_CLEARERROR

		if (! ix ) {
			/* this is setSequenceField */
			gErr = self->err = awGetEventFieldType ( self->event, field_name, &field_type );
		} else {
			/* one of the aliases */
			field_type = ix;
		}

		if ( --items > startArray ) {
			src_offset  = (int)SvIV ( ST(2) );
			startArray++;
		}
		if ( items > startArray ) {
			dest_offset = (int)SvIV ( ST(3) );
			startArray++;
		}


		if ( SvTYPE(SvRV(ST(startArray))) == SVt_PVAV )
			av = (AV*)SvRV( ST(startArray) );
		else 
			av = av_make ( (items+1-startArray) , &ST(startArray) );

		gErr = self->err = awxsSetSequenceField ( self->event, field_name, field_type, src_offset, dest_offset, av, NULL, NULL );


		if ( self->err != AW_NO_ERROR ) {
			sv_setpv ( perl_get_sv("@",0), awErrorToCompleteString ( gErr ) );
			warn ( "Error Found!!" );
			warn ( awErrorToCompleteString( self->err ) );
		}

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;


	OUTPUT:
	RETVAL



awaBool
setStructFieldFromEvent ( self, field_name, value )
	Aw::Event self
	char * field_name
	Aw::Event value

	CODE:
		AWXS_CLEARERROR

		gErr = self->err = awSetStructFieldFromEvent ( self->event, field_name, value->event );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



awaBool
setStructSeqFieldFromEvents ( self, field_name, ... )
	Aw::Event self
	char * field_name

	PREINIT:
		BrokerEvent * events;
		AV * av;
		SV ** sv;
		int src_offset  = 0;
		int dest_offset = 0;
		int i, n;
		int startArray = 2;  /* generally as the 3rd arguement */

	CODE:
		AWXS_CLEARERROR

		if ( --items > startArray ) {
			src_offset  = (int)SvIV ( ST(2) );
			startArray++;
		}
		if ( items > startArray ) {
			dest_offset = (int)SvIV ( ST(3) );
			startArray++;
		}

		if ( SvTYPE(SvRV(ST(startArray))) == SVt_PVAV )
			av = (AV*)SvRV( ST(startArray) );
		else 
			av = av_make ( (items+1-startArray) , &ST(startArray) );

		n  = av_len ( av ) + 1;


		/* Convert AV into Array of BrokerEvents */

		events = (BrokerEvent *)safemalloc ( n * sizeof(BrokerEvent) );
		for (i=0; i<n; i++) {
			sv = av_fetch ( av, i, 0 );
			events[i] = ((xsBrokerEvent *)SvIV( *sv ) )->event;
		}


		gErr = self->err = awSetStructSeqFieldFromEvents ( self->event, field_name, src_offset, dest_offset, n, events );

		AWXS_CHECKSETERROR

		Safefree ( events );

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



awaBool
init ( self, data )
	Aw::Event self
	HV * data

	CODE:
		AWXS_CLEARERROR

		gErr = self->err = awxsSetEventFromHash ( self->event, data );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



awaBool
setStringFieldToSubstring ( self, field_name, char_offset, nc, value )
	Aw::Event self
	char * field_name
	int char_offset
	int nc
	char * value

	ALIAS:
		Aw::Event::setUCStringFieldToSubstring = 1

	PREINIT:
		charUC * uc = NULL;

	CODE:
		AWXS_CLEARERROR

		gErr = self->err
		= (ix)
		  ? awSetUCStringFieldToSubstring ( self->event, field_name, char_offset, nc, uc = awUTF8toUC( value ) )
		  : awSetStringFieldToSubstring ( self->event, field_name, char_offset, nc, value )
		;

		if ( uc )
			Safefree ( uc );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



awaBool
setTag ( self, tag )
	Aw::Event self
	int tag

	CODE:
		AWXS_CLEARERROR

		gErr = self->err = awSetEventTag ( self->event, tag );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



char *
toBinData ( self )
	Aw::Event self

	PREINIT:
		int size;

	CODE:
		AWXS_CLEARERROR

		gErr = self->err = awEventToBinData ( self->event, &RETVAL, &size );
		/* "size" is supposed to be a return value in C but not in
		   Java so I am skipping it here.  Also the array structure is
		   unclear to me (byte offsets) so I am just returning a string
		   for now */
		if ( self->err != AW_NO_ERROR ) {
			sv_setpv ( perl_get_sv("@",0), awErrorToCompleteString ( gErr ) );
			Safefree ( RETVAL );
			XSRETURN_UNDEF;
		}

	OUTPUT:
	RETVAL



char *
toFormattedString ( self, format_string )
	Aw::Event self
	char * format_string

	CODE:
		AWXS_CLEARERROR

		gErr = self->err = awEventToFormattedString ( self->event, format_string, &RETVAL );
		if ( self->err != AW_NO_ERROR ) {
			sv_setpv ( perl_get_sv("@",0), awErrorToCompleteString ( gErr ) );
			Safefree ( RETVAL );
			XSRETURN_UNDEF;
		}

	OUTPUT:
	RETVAL



awaBool
setSequenceFieldSize ( self, field_name, size )
	Aw::Event self
	char * field_name
	int size

	CODE:
		AWXS_CLEARERROR

		gErr = self->err = awSetSequenceFieldSize ( self->event, field_name, size ); 

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



char *
stringFromANSI ( self, string )
	Aw::Event self
	char * string

	CODE:
		AWXS_CLEARERROR

		RETVAL = awAtoUTF8 ( string );

	OUTPUT:
	RETVAL



char *
stringToANSI ( self, utf8String)
	Aw::Event self
	char * utf8String

	CODE:
		AWXS_CLEARERROR

		RETVAL = awUTF8toA ( utf8String );

	OUTPUT:
	RETVAL



HV *
toHashRef ( self )
	Aw::Event self

	CODE:
		AWXS_CLEARERROR

		RETVAL = newHV();

		gErr = self->err = awxsSetHashFromEvent ( self->event, RETVAL );

		hv_store ( RETVAL, "_name", 5, newSVpv ( awGetEventTypeName(self->event), 0), 0 );

		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
		RETVAL
	
	CLEANUP:
		SvREFCNT_dec ( RETVAL );



awaBool
validate ( self, client )
	Aw::Event self
	Aw::Client client

	CODE:
		AWXS_CLEARERROR

		gErr = self->err = awValidateEvent ( client->client, self->event );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



#===============================================================================

MODULE = Aw			PACKAGE = Aw::EventType

#===============================================================================

#===============================================================================
#  Aw::EventType
#	::new
#	::DESTROY-A
#
#	::delete
#	::isAutoCleanup			Java CADK 7-38
#	::isPublish			Java CADK 7-38
#	::isPublishReply-A		Java CADK 7-39
#	::publishInterval		Java CADK 7-41    ("setPublishInterval")
#	::publishReply			Java CADK 7-34/41 ("get/setPublishReply")
#	::name				Java CADK 7-34    ("getName")
#	::needsAck			Java CADK 7-39
#	::nextPublish			Java CADK 7-34	  ("get/(set)NextPublish")
#	::reply				Java CADK 7-35/41 ("getReplyName"/"setReply")
#	::setNextPublish		Java CADK 7-41
#	::subscriptionFilter		Java CADK 7-37/42 ("get/setSubscriptionFilter
#
#       ::err-A                      	ala Mysql::
#       ::errmsg-A                   	ala Mysql::
#	::error-A
#===============================================================================



Aw::EventType
new ( CLASS, event_type_name )
	char * CLASS
	char * event_type_name

	CODE:
		RETVAL = (xsAdapterEventType *)safemalloc ( sizeof(xsAdapterEventType) );
		if ( RETVAL == NULL ) {
			setErrMsg ( &gErrMsg, 1, "unable to malloc new adapter event" );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

		/* initialize the error cleanly */
		RETVAL->err    = AW_NO_ERROR;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;
		RETVAL->callback = 0x0;

		RETVAL->adapterET = awNewAdapterET ( event_type_name );

		RETVAL->adapterET->userDataDeleteFunction =& userDataDelete;

	OUTPUT:
	RETVAL



void
delete ( self )
	Aw::EventType self

	CODE:
		AWXS_CLEARERROR

		OneAdapterET    = self;
		OneAdapterETRef = ST(0);
		awDeleteAdapterET ( self->adapterET );


awVector *
getInfoSets ( self )
	Aw::EventType self

	ALIAS:
		Aw::EventType::infoSets = 1

	CODE:
		AWXS_CLEARERROR

		RETVAL = self->adapterET->infoSets;

	OUTPUT:
	RETVAL



int
getMaxResults ( self )
	Aw::EventType self

	ALIAS:
		Aw::EventType::maxResults = 1

	CODE:
		AWXS_CLEARERROR

		RETVAL = self->adapterET->maxResults;

	OUTPUT:
	RETVAL



awaBool
isAutoCleanup ( self )
	Aw::EventType self

	CODE:
		AWXS_CLEARERROR

		RETVAL = self->adapterET->autoCleanup; 

	OUTPUT:
	RETVAL



awaBool
isPublish ( self, ... )
	Aw::EventType self

	CODE:
		AWXS_CLEARERROR

		if ( items > 1 )
			self->adapterET->isPublish = (unsigned char)SvUV( ST(1) );

		RETVAL = self->adapterET->isPublish; 

	OUTPUT:
	RETVAL



#
#  awNewAdapterET sets this variable, we don't touch it!
#
char *
getName ( self )
	Aw::EventType self

	ALIAS:
		Aw::EventType::name = 1

	CODE:
		AWXS_CLEARERROR

		RETVAL = self->adapterET->name; 

	OUTPUT:
	RETVAL



awaBool
needsAck ( self )
	Aw::EventType self

	CODE:
		AWXS_CLEARERROR

		RETVAL = self->adapterET->needsAck; 

	OUTPUT:
	RETVAL



awaBool
newSubscription ( self, client )
	Aw::EventType self
	Aw::Client client

	CODE:
		gErr = self->err = awNewSubscription ( client->client, self->adapterET->name, self->adapterET->subscriptionFilter );

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

		{
#ifdef AWXS_WARNS
			if ( RETVAL && self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
		}

	OUTPUT:
	RETVAL



int
getPublishInterval ( self, ... )
	Aw::EventType self

	ALIAS:
		Aw::EventType::publishInterval = 1

	CODE:
		AWXS_CLEARERROR

		if ( items > 1 )
			/* self->adapterET->publishInterval = (int)SvIV( ST(1) ); */
			awAdapterETSetPublishInterval ( self->adapterET, (int)SvIV( ST(1) ) );

		RETVAL = self->adapterET->publishInterval; 

	OUTPUT:
	RETVAL



void
setPublishInterval ( self, ... )
	Aw::EventType self

	PREINIT:
		int interval;

	CODE:
		interval
		= ( items > 1 )
		  ? (int)SvIV( ST(1) )
		  : 0
		;

		awAdapterETSetPublishInterval ( self->adapterET, interval );



awaBool
isPublishReply ( self, ... )
	Aw::EventType self

	ALIAS:
		Aw::EventType::publishReply  = 1

	CODE:
		AWXS_CLEARERROR

		if ( items > 1 )
			self->adapterET->publishReply = (awaBool)SvIV( ST(1) );

		RETVAL = self->adapterET->publishReply; 

	OUTPUT:
	RETVAL



void
setPublishReply ( self, publishReply )
	Aw::EventType self
	awaBool publishReply

	CODE:
		self->adapterET->publishReply = publishReply;



char *
getReplyName ( self, ... )
	Aw::EventType self

	ALIAS:
		Aw::EventType::replyName = 1

	CODE:
		AWXS_CLEARERROR

		if ( items > 1 )
			awAdapterETSetReply ( self->adapterET, (char *)SvPV( ST(1), PL_na ) );

		RETVAL = self->adapterET->replyName; 

	OUTPUT:
	RETVAL



awaBool
hasReply ( self )
	Aw::EventType self

	CODE:
		if ( self->adapterET->replyName == NULL )
			RETVAL = awaFalse;

		if (! strcmp( self->adapterET->replyName, "Adapter::ack" ) )
			XSRETURN_UNDEF;
		else
			RETVAL = awaTrue;

	OUTPUT:
	RETVAL



void
setReply ( self, replyName )
	Aw::EventType self
	char * replyName


	CODE:
		AWXS_CLEARERROR

		if ( items > 1 )
			awAdapterETSetReply ( self->adapterET, replyName );



char *
getErrorRequestTo ( self, ... )
	Aw::EventType self

	ALIAS:
		Aw::EventType::errorRequestTo = 1

	CODE:
		AWXS_CLEARERROR

		if ( items > 1 ) {
			if ( self->adapterET->errorRequestsTo )
				Safefree ( self->adapterET->errorRequestsTo );

			self->adapterET->errorRequestsTo = strdup ( (char *)SvPV( ST(1), PL_na ) );
		}

		RETVAL = self->adapterET->errorRequestsTo;

	OUTPUT:
	RETVAL



void
setErrorRequestTo ( self, to )
	Aw::EventType self
	char * to

	CODE:
		AWXS_CLEARERROR

		self->adapterET->errorRequestsTo = strdup ( to );



time_t
getNextPublish ( self, ... )
	Aw::EventType self

	ALIAS:
		Aw::EventType::nextPublish = 1

	PREINIT:
		time_t t;

	CODE:
		AWXS_CLEARERROR

		if ( items > 1 )
			self->adapterET->nextPublish = (time_t)SvNV( ST(1) );

		RETVAL = self->adapterET->nextPublish; 

	OUTPUT:
	RETVAL




void
setNextPublish ( self )
	Aw::EventType self

	CODE:
		AWXS_CLEARERROR
		awAdapterETSetNextPublish ( self->adapterET );



char *
getSubscriptionFilter ( self, ... )
	Aw::EventType self

	ALIAS:
		Aw::EventType::subscriptionFilter = 1

	CODE:
		AWXS_CLEARERROR

		if ( items > 1 ) {
			char * filter = (char *)SvPV( ST(1), PL_na );
			if ( self->adapterET->subscriptionFilter )
				Safefree ( self->adapterET->subscriptionFilter );
			self->adapterET->subscriptionFilter = strdup ( filter );
		}

		RETVAL = self->adapterET->subscriptionFilter; 

	OUTPUT:
	RETVAL



#
#  Here for those insisting on a voide return type
#
void
setSubscriptionFilter ( self, filter )
	Aw::EventType self
	char * filter


	CODE:
		AWXS_CLEARERROR

		if ( self->adapterET->subscriptionFilter )
			Safefree ( self->adapterET->subscriptionFilter );

		self->adapterET->subscriptionFilter = strdup ( filter );



#===============================================================================

MODULE = Aw			PACKAGE = Aw::Filter

#===============================================================================

#===============================================================================
#  Aw::Filter
#	::new
#	::DESTROY-A
#
#	::getEventTypeName		Java-I 15-152
#	::getFilterString-A		Java-I 15-153
#	::match				Java-I 15-153
#	::toString-A			Java-I 15-153
#
#       ::err-A   			ala Mysql::
#       ::errmsg-A			ala Mysql::
#       ::error-A
#===============================================================================



Aw::Filter
new ( CLASS, client, event_type_name, filter_string )
	char * CLASS
	Aw::Client client
	char * event_type_name
	char * filter_string

	CODE:
		RETVAL = (xsBrokerFilter *)safemalloc ( sizeof(xsBrokerFilter) );
		if ( RETVAL == NULL ) {
			setErrMsg ( &gErrMsg, 1, "unable to malloc new filter" );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

		/* initialize the error cleanly */
		RETVAL->err    = AW_NO_ERROR;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		gErr = RETVAL->err = awNewBrokerFilter ( client->client, event_type_name, filter_string, &RETVAL->filter);

		if ( RETVAL->err != AW_NO_ERROR ) {
			setErrMsg ( &gErrMsg, 1, "filter creation failed" );
			Safefree ( RETVAL );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

		RETVAL->event_type_name = strdup ( event_type_name );
		RETVAL->filter_string = strdup ( filter_string );

	OUTPUT:
	RETVAL


char *
getEventTypeName ( self )
	Aw::Filter self

	ALIAS:
		Aw::Filter::getFilterString = 1

	CODE:
		AWXS_CLEARERROR

		RETVAL
		= (ix)
		  ? self->filter_string
		  : self->event_type_name
		;

	OUTPUT:
	RETVAL



awaBool
match ( self, event )
	Aw::Filter self
	Aw::Event event

	PREINIT:
		BrokerBoolean bRV;

	CODE:
		AWXS_CLEARERROR

		gErr = self->err = awMatchFilter ( self->filter, event->event, &bRV);

		if ( self->err != AW_NO_ERROR ) {
			self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to instantiate new event %s", awErrorToCompleteString ( self->err ) );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

		RETVAL = (awaBool)bRV;

	OUTPUT:
	RETVAL



#===============================================================================

MODULE = Aw			PACKAGE = Aw::Format

#===============================================================================

#===============================================================================
#  Aw::Format
#	::new
#	::DESTROY-A
#
#	::assemble			Java-I 15-156
#	::format			Java-I 15-157
#	::formatBindVariable		Java-I 15-157
#	::free				     C
#	::getTokenCount			Java-I 15-158
#	::preparse			Java-I 15-159
#	::setFormatMode			Java-I 15-160
#
#       ::err-A   			ala Mysql::
#       ::errmsg-A			ala Mysql::
#       ::error-A
#===============================================================================



Aw::Format
new ( CLASS, ... )
	char * CLASS

	CODE:
		RETVAL = (xsBrokerFormat *)safemalloc ( sizeof(xsBrokerFormat) );
		if ( RETVAL == NULL ) {
			setErrMsg ( &gErrMsg, 1, "unable to malloc new format" );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

		/* initialize the error cleanly */
		RETVAL->err    = AW_NO_ERROR;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		if ( items == 3 ) {
			char * format_string = (char *)SvPV(ST(2), PL_na);
			if ( RETVAL->format_string )
				Safefree ( RETVAL->format_string );

			RETVAL->format_string = strdup ( format_string );

			RETVAL->event =& AWXS_BROKEREVENT(1)->event;
		} else if ( items == 2 ) {
			if ( sv_isobject ( ST(1) ) && sv_derived_from ( ST(1), "Aw::Event" ) )
				RETVAL->event =& AWXS_BROKEREVENT(1)->event;
			else {
				char * format_string = (char *)SvPV(ST(1), PL_na);
				if ( RETVAL->format_string )
					Safefree ( RETVAL->format_string );

				RETVAL->format_string = strdup ( format_string );
			}
		}

	OUTPUT:
	RETVAL



char *
assemble ( self, ... )
	Aw::Format self

	CODE:
		AWXS_CLEARERROR

		if (items == 2)
			self->event =& AWXS_BROKEREVENT(1)->event;

		gErr = self->err = awEventFormatAssemble ( *self->event, self->tokens, &RETVAL);

		if ( self->err != AW_NO_ERROR ) {
			self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to instantiate new event %s", awErrorToCompleteString ( self->err ) );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

	OUTPUT:
	RETVAL



char *
format ( self, ... )
	Aw::Format self

	PREINIT:
		char * format_string;

	CODE:
		AWXS_CLEARERROR

		if ( items == 2 ) {
			self->event =& AWXS_BROKEREVENT(1)->event;

			format_string = (char *)SvPV(ST(2), PL_na);
			if ( self->format_string )
				Safefree ( self->format_string );

			self->format_string = strdup ( format_string );
		} else if ( items ) {
			if ( sv_isobject ( ST(1) ) && sv_derived_from ( ST(1), "Aw::Event" ) )
				self->event =& AWXS_BROKEREVENT(1)->event;
			else {
				format_string = (char *)SvPV(ST(1), PL_na);
				if ( self->format_string )
					Safefree ( self->format_string );

				self->format_string = strdup ( format_string );
			}
		}

		gErr = self->err = awEventToFormattedString ( *self->event, self->format_string, &RETVAL );

		AWXS_CHECKSETERROR

	OUTPUT:
	RETVAL



char *
formatBindVariable ( self, index, place_holder_name )
	Aw::Format self
	int index
	char * place_holder_name

	CODE:
		AWXS_CLEARERROR

		RETVAL = awEventFormatBindVariable ( self->tokens, index, &place_holder_name );

	OUTPUT:
	RETVAL
	place_holder_name



void
free ( self )
	Aw::Format self

	CODE:
		AWXS_CLEARERROR

		awEventFormatFree ( self->tokens );



int
getTokenCount ( self )
	Aw::Format self

	CODE:
		AWXS_CLEARERROR

		RETVAL = awEventFormatTokens ( self->tokens );

	OUTPUT:
	RETVAL



char *
preparse ( self, ... )
	Aw::Format self

	CODE:
		AWXS_CLEARERROR

		if ( items ) {
			char * format_string = (char *)SvPV(ST(1), PL_na);
			if ( self->format_string )
				Safefree ( self->format_string );

			self->format_string = strdup ( format_string );
		}
		self->tokens = awEventFormatPreparse ( self->format_string );

	OUTPUT:
	RETVAL



awaBool
setFormatMode ( self, format_option, mode )
	Aw::Format self
	char * format_option
	char * mode

	CODE:
		AWXS_CLEARERROR

		RETVAL = (awaBool) awSetFormatMode ( format_option, mode );

	OUTPUT:
	RETVAL



#===============================================================================

MODULE = Aw			PACKAGE = Aw::License

#===============================================================================

#===============================================================================
#  Aw::Log
#	::new
#	::DESTROY-A
#
#	::getExpiration
#	::getFlags
#	::getMajorVersion
#	::getMinorVersion
#	::getPlatform
#	::getProduct
#	::getSerialNumber
#	::verify				Java CADK 7-67
#===============================================================================



Aw::License
new ( CLASS, license_string )
	char * CLASS
	char * license_string

	CODE:
		RETVAL = (xsAdapterLicense *)safemalloc ( sizeof(xsAdapterLicense) );
		if ( RETVAL == NULL ) {
			setErrMsg ( &gErrMsg, 1, "unable to malloc new license" );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

		RETVAL->license_string = strdup ( RETVAL->license_string );

	OUTPUT:
	RETVAL



time_t
getExpiration ( self )
	Aw::License self

	CODE:
		RETVAL = awGetLicenseExpiration ( self->license_string );

	OUTPUT:
	RETVAL



char **
getFlagsRef ( self )
	Aw::License self

	PREINIT:
		int count_charPtrPtr = 0;  /* we don't know License Flags length */

	CODE:
		RETVAL = awGetLicenseFlags ( self->license_string );

	OUTPUT:
	RETVAL



int
getPlatform ( self )
	Aw::License self

	ALIAS:
		Aw::Licence::getMajorVersion = 1
		Aw::Licence::getMinorVersion = 2
		Aw::Licence::getSerialNumber = 3

	CODE:
		RETVAL
		= (ix>=2)
		  ? (ix-2)
		    ? awGetLicenseSerialNumber ( self->license_string )
		    : awGetLicenseMinorVersion ( self->license_string )
		  : (ix)
		    ? awGetLicenseMajorVersion ( self->license_string )
		    : awGetLicensePlatform ( self->license_string )
		;

	OUTPUT:
	RETVAL



char *
getProduct ( self )
	Aw::License self

	CODE:
		RETVAL = awGetLicenseProduct ( self->license_string );

	OUTPUT:
	RETVAL



int
verify ( self, ... )
	Aw::License self

	PREINIT:
		char * product;
		int version_major;
		int version_minor;

	CODE:
		product
		= (items>1)
		  ? (char *)SvPV ( ST(1), PL_na )
		  : awGetLicenseProduct ( self->license_string )
		;

		version_major
		= (items>2)
		  ? (int)SvIV ( ST(2) )
		  : awGetLicenseMajorVersion ( self->license_string )
		;

		version_minor
		= (items==4)
		  ? (int)SvIV ( ST(3) )
		  : awGetLicenseMinorVersion ( self->license_string )
		;

		RETVAL = awValidateLicense ( self->license_string, product, version_major, version_minor );

	OUTPUT:
		RETVAL

	CLEANUP:
		if ( items == 1 )
			free ( product );



#===============================================================================

MODULE = Aw			PACKAGE = Aw::Log

#===============================================================================

#===============================================================================
#  Aw::Log
#	::new
#	::DESTROY-A
#
#	::alert				Java CADK 7-69
#	::beQuiet			Java CADK 7-68
#	::doPrintf			Java CADK 7-68
#	::getMessage			Java CADK 7-71
#	::getOptionList			Java CADK 7-72
#	::info-A			Java CADK 7-74
#	::init				Java CADK 7-74
#	::isDebug			Java CADK 7-74
#	::isDoPrintf			Java CADK 7-74
#	::isInfo			Java CADK 7-74
#	::isQuiet			Java CADK 7-75
#	::setDebug			Java CADK 7-79
#	::start-A			Java CADK 7-81
#	::startLogging			Java CADK 7-81
#	::warning-A			Java CADK 7-82
#===============================================================================



Aw::Log
new ( CLASS, ... )
	char * CLASS

	CODE:
		RETVAL = (xsAdapterLog *)safemalloc ( sizeof(xsAdapterLog) );	

		if ( RETVAL == NULL ) {
			setErrMsg ( &gErrMsg, 1, "unable to malloc new adapter log" );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

		RETVAL->maxMessageSize = 2048;

		if ( items == 2 )
			/*  for now work only with a property object and not an
			 *  array or array ref of properties
			 */
   			if ( SvROK(ST(1)) && (SvTYPE(SvRV(ST(1))) == SVt_PVHV) )
				awAdapterInitLogging ( awxsHashToProperties ( (HV*)SvRV( ST(1) ) ) );
			else
				warn ( "Arg 2 is not a hash reference.");

	OUTPUT:
	RETVAL



# void
# alert ( self, category, msgNumber, ... )
# 	Aw::Log self
# 	int category
# 	int msgNumber
# 
# 	ALIAS: 
# 		Aw::Log::info    = 1
# 		Aw::Log::warning = 2
# 
# 	PREINIT:
# 	AWPublic extern void (*(ixFuncs[3]))() = { awAdapterAlert, awAdapterInfo, awAdapterWarning };
# 	// void (*(ixFuncs[3]))() = { awAdapterAlert, awAdapterInfo, awAdapterWarning };
# 
# 	CODE:
# 		switch ( items )
# 		{
# 		  case 4:
# 			// (*ixFuncs)[ix] ( category, msgNumber, (char *)SvPV ( ST(3), PL_na ) );
# 			(*ixFuncs)[ix] ( category, msgNumber, (char *)SvPV ( ST(3), PL_na ) );
# 			break;
# 
# 		  case 5:
# 			(*ixFuncs)[ix] ( category, msgNumber, (char *)SvPV ( ST(3), PL_na ), (char *)SvPV ( ST(4), PL_na ) );
# 			break;
# 
# 		  case 6:
# 			(*ixFuncs)[ix] ( category, msgNumber, (char *)SvPV ( ST(3), PL_na ), (char *)SvPV ( ST(4), PL_na ), (char *)SvPV ( ST(5), PL_na ));
# 			break;
# 
# 		  default:
# 			break;
# 		}



void
alert ( self, category, msgNumber, ... )
	Aw::Log self
 	int category
 	int msgNumber
 
 
 	CODE:
 		switch ( items )
 		{
 		  case 4:
 			awAdapterAlert ( category, msgNumber, (char *)SvPV ( ST(3), PL_na ) );
 			break;
 
 		  case 5:
 			awAdapterAlert ( category, msgNumber, (char *)SvPV ( ST(3), PL_na ), (char *)SvPV ( ST(4), PL_na ) );
 			break;
 
 		  case 6:
 			awAdapterAlert ( category, msgNumber, (char *)SvPV ( ST(3), PL_na ), (char *)SvPV ( ST(4), PL_na ), (char *)SvPV ( ST(5), PL_na ));
 			break;
 
 		  default:
 			break;
 		}



void
info ( self, category, msgNumber, ... )
	Aw::Log self
 	int category
 	int msgNumber
 
 
 	CODE:
 		switch ( items )
 		{
 		  case 4:
 			awAdapterInfo ( category, msgNumber, (char *)SvPV ( ST(3), PL_na ) );
 			break;
 
 		  case 5:
 			awAdapterInfo ( category, msgNumber, (char *)SvPV ( ST(3), PL_na ), (char *)SvPV ( ST(4), PL_na ) );
 			break;
 
 		  case 6:
 			awAdapterInfo ( category, msgNumber, (char *)SvPV ( ST(3), PL_na ), (char *)SvPV ( ST(4), PL_na ), (char *)SvPV ( ST(5), PL_na ));
 			break;
 
 		  default:
 			break;
		}



void
warning ( self, category, msgNumber, ... )
	Aw::Log self
 	int category
 	int msgNumber
 
 
 	CODE:
 		switch ( items )
 		{
 		  case 4:
 			awAdapterWarning ( category, msgNumber, (char *)SvPV ( ST(3), PL_na ) );
 			break;
 
 		  case 5:
 			awAdapterWarning ( category, msgNumber, (char *)SvPV ( ST(3), PL_na ), (char *)SvPV ( ST(4), PL_na ) );
 			break;
 
 		  case 6:
 			awAdapterWarning ( category, msgNumber, (char *)SvPV ( ST(3), PL_na ), (char *)SvPV ( ST(4), PL_na ), (char *)SvPV ( ST(5), PL_na ));
 			break;
 
 		  default:
 			break;
		}



int
beQuiet ( self, ... )
	Aw::Log  self

	CODE:
		if ( items == 2 ) {
			self->beQuiet = (int)SvIV( ST(1) );
			awAdapterSetQuiet ( self->beQuiet );
		}
		RETVAL = self->beQuiet = awAdapterBeQuiet ();

	OUTPUT:
	RETVAL



awaBool
doPrintf ( self, ... )
	Aw::Log  self

	CODE:
		if ( items == 2 )
			self->doPrintf = (awaBool)SvIV( ST(1) );

		RETVAL = self->doPrintf = awAdapterDoLogPrintf ();

	OUTPUT:
	RETVAL



char *
_getMessage ( self, msgId, strings )
	Aw::Log  self
	int msgId
	char ** strings

	PREINIT:
		/* va_list ap; */
		int n;

	CODE:
		n = av_len ( (AV*)SvRV( ST(2) ) ) + 1;

		RETVAL = (char *)safemalloc ( ( self->maxMessageSize ) * sizeof(char) );
		memset ( RETVAL, 0, (self->maxMessageSize) );

		/* Don't think we're getting this back out of the CV type...
		 * va_start ( ap, ST(1) );
		 * AwAdapterGetMessages_va ( RETVAL, maxMessageSize, msgId, ap );
		 * va_end (ap);
		 */
		
		/* look for a C equivalent for "eval" */
		switch (n)
		  {
			case  1:
				awAdapterGetMessage ( RETVAL, self->maxMessageSize, msgId, strings[0] );
				break;

			case  2:
				awAdapterGetMessage ( RETVAL, self->maxMessageSize, msgId, strings[0], strings[1] );
				break;

			case  3:
				awAdapterGetMessage ( RETVAL, self->maxMessageSize, msgId, strings[0], strings[1], strings[2] );
				break;

			case  4:
				awAdapterGetMessage ( RETVAL, self->maxMessageSize, msgId, strings[0], strings[1], strings[2], strings[3] );
				break;

			case  5:
				awAdapterGetMessage ( RETVAL, self->maxMessageSize, msgId, strings[0], strings[1], strings[2], strings[3], strings[4] );
				break;

			case  6:
				awAdapterGetMessage ( RETVAL, self->maxMessageSize, msgId, strings[0], strings[1], strings[2], strings[3], strings[4], strings[5] );
				break;

			case  7:
				awAdapterGetMessage ( RETVAL, self->maxMessageSize, msgId, strings[0], strings[1], strings[2], strings[3], strings[4], strings[5], strings[6] );
				break;

			case  8:
				awAdapterGetMessage ( RETVAL, self->maxMessageSize, msgId, strings[0], strings[1], strings[2], strings[3], strings[4], strings[5], strings[6], strings[7] );
				break;

			case  9:
				awAdapterGetMessage ( RETVAL, self->maxMessageSize, msgId, strings[0], strings[1], strings[2], strings[3], strings[4], strings[5], strings[6], strings[7], strings[8] );
				break;

			default:  /* except for 0 */
			case 10:  /* 10 is the limit of the C API */
				awAdapterGetMessage ( RETVAL, self->maxMessageSize, msgId, strings[0], strings[1], strings[2], strings[3], strings[4], strings[5], strings[6], strings[7], strings[8], strings[9] );
				break;
		  }

	OUTPUT:
		RETVAL

	CLEANUP:
		XS_release_charPtrPtr ( strings );



char *
getOptionList ( self )
	Aw::Log  self

	CODE:
		RETVAL = awAdapterLoggingOptionList ();

	OUTPUT:
	RETVAL



void
init ( self, properties )
	Aw::Log  self
	HV * properties

	CODE:
		awAdapterInitLogging ( awxsHashToProperties (properties) );



awaBool
isDebug ( self )
	Aw::Log self

	CODE:
		RETVAL = awAdapterDoDebug ();

	OUTPUT:
	RETVAL



awaBool
isDoPrintf ( self )
	Aw::Log self

	CODE:
		RETVAL = self->doPrintf = awAdapterDoLogPrintf ();

	OUTPUT:
	RETVAL



awaBool
isInfo ( self )
	Aw::Log self

	CODE:
		RETVAL = awAdapterIsInfo ();

	OUTPUT:
	RETVAL



awaBool
isQuiet ( self )
	Aw::Log self

	CODE:
		RETVAL = self->beQuiet = awAdapterBeQuiet ();

	OUTPUT:
	RETVAL



short
maxMessageSize ( self, ... )
	Aw::Log self

 	ALIAS: 
 		Aw::Log::getMessageSize = 1
 		Aw::Log::setMessageSize = 2

	CODE:

		if ( items )
			self->maxMessageSize = (short)SvIV(ST(1));

		RETVAL = self->maxMessageSize;

	OUTPUT:
	RETVAL



void
setDebug ( self, debug )
	Aw::Log self
	int debug

	CODE:
		awAdapterSetDebug ( debug );



#
#  Note in the Java API (CADK 7-80/81) the awAdapterPropteries is an optional
#  arguement
#
void
startLogging ( self, progName, ... )
	Aw::Log self
	char * progName

	ALIAS:
		Aw::Log::start = 1

	CODE:
		if ( items == 3 ) {
#if ( AW_VERSION_31 || AW_VERSION_40 )
			warn ( "'startLogging' does not support property setting in AW v3.1+.");
#else
   			if( SvROK(ST(2)) && (SvTYPE(SvRV(ST(2))) == SVt_PVHV) )
				awAdapterSetLoggingProperties ( awxsHashToProperties ( (HV*)SvRV( ST(2) ) ) );
			else
				warn ( "Arg 3 is not a hash reference.");
#endif /* ( AW_VERSION_31 || AW_VERSION_40 ) */
		}

		awAdapterStartLogging ( progName );



int
parseOptions ( self, progName, argv )
	Aw::Log self
	char * progName
	char ** argv

	CODE:
#if ( AW_VERSION_31 || AW_VERSION_40 )
		warn ( "'parseOptions' is not supported in AW v3.1+.");
#else
		{
 		int size = av_len ( (AV*)SvRV( ST(2) ) ) + 1;
 		RETVAL = awAdapterParseLoggingOption ( progName, &size, &argv );
		}
#endif /* ( AW_VERSION_31 || AW_VERSION_40 ) */

	OUTPUT:
		RETVAL

	CLEANUP:
		XS_release_charPtrPtr ( argv );



#===============================================================================

MODULE = Aw			PACKAGE = Aw::TypeDef

#===============================================================================

#===============================================================================
#  Aw::TypeDef
#	::new
#	::DESTROY-A
#
#	::getBaseTypeName-A		Java-I 15-167
#	::getBrokerHost			Java-I 15-167
#	::getBrokerName-A		Java-I 15-167
#	::getBrokerPort			Java-I 15-168
#	::getDescription-A		Java-I 15-168
#	::getFamilyNames		   C
#	::getFieldDef			Java-I 15-169
#	::getFieldNames-A		Java-I 15-169
#	::getFieldType			Java-I 15-170
#	::getScopeTypeName-A		Java-I 15-170
#	::getStorageType-A		Java-I 15-171
#	::getTerritoryName-A		Java-I 15-171
#	::getTimeToLive			Java-I 15-171
#	::getTypeName-A			Java-I 15-171
#	::toString-A
#
#       ::err-A   			ala Mysql::
#       ::errmsg-A			ala Mysql::
#       ::error-A
#===============================================================================



Aw::TypeDef
new ( CLASS, agent )
	char * CLASS

	CODE:
		RETVAL = (xsBrokerTypeDef *)safemalloc ( sizeof(xsBrokerTypeDef) );
		if ( RETVAL == NULL ) {
			setErrMsg ( &gErrMsg, 1, "unable to malloc new type def" );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

		/* initialize the error cleanly */
		RETVAL->err    = AW_NO_ERROR;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		// this doesn't make sense, items is always 2, do a strcmp from the object name

		if ( items == 2 ) {
			xsBrokerEvent * event = AWXS_BROKEREVENT(1);
			gErr = RETVAL->err = awGetTypeDefFromEvent ( event->event, &RETVAL->type_def );
		} else {
			xsBrokerClient * client = AWXS_BROKERCLIENT(1);
			char * event_type_name  = (char *)SvPV( ST(2), PL_na );

			gErr = RETVAL->err = awGetEventTypeDef ( client->client, event_type_name, &RETVAL->type_def );
		}
		if ( RETVAL->err != AW_NO_ERROR ) {
			Safefree ( RETVAL );
			XSRETURN_UNDEF;
		}

	OUTPUT:
	RETVAL



char *
getBrokerHost ( self )
	Aw::TypeDef self

	ALIAS:
		Aw::TypeDef::getBrokerName     = 1
		Aw::TypeDef::getDescription    = 2
		Aw::TypeDef::getTerritoryName  = 3

	CODE:
		AWXS_CLEARERROR

		gErr = self->err
		= (ix>=2)
		  ? (ix-2)
		    ? awGetTypeDefTerritoryName ( self->type_def, &RETVAL )
		    : awGetTypeDefDescription ( self->type_def, &RETVAL )
		  : (ix)
		    ? awGetTypeDefBrokerName ( self->type_def, &RETVAL )
		    : awGetTypeDefBrokerHost ( self->type_def,  &RETVAL )
		;

		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



int
getBrokerPort ( self )
	Aw::TypeDef self

	ALIAS:
		Aw::TypeDef::getStorageType = 1
		Aw::TypeDef::getTimeToLive  = 2

	CODE:
		AWXS_CLEARERROR

		gErr = self->err 
		     = ( ix )
		       ? (ix-1)
		         ? awGetTypeDefTimeToLive ( self->type_def, &RETVAL )
		         : awGetTypeDefStorageType ( self->type_def, &RETVAL )
		       : awGetTypeDefBrokerPort ( self->type_def, &RETVAL )
		     ;

		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



Aw::TypeDef
getFieldDef ( self, field_name )
	Aw::TypeDef self
	char * field_name

	PREINIT:
		char CLASS[] = "Aw::TypeDef";

	CODE:
		AWXS_CLEARERROR

		RETVAL = (xsBrokerTypeDef *)safemalloc ( sizeof(xsBrokerTypeDef) );
		if ( RETVAL == NULL ) {
			self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new type def" );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}
		/* initialize the error cleanly */
		RETVAL->err    = AW_NO_ERROR;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		gErr = self->err = awGetTypeDefFieldDef ( self->type_def, field_name, &RETVAL->type_def );

		AWXS_CHECKSETERROR_RETURN

	OUTPUT:
	RETVAL



short
getFieldType ( self, field_name )

	CASE:	ix == 1
		ALIAS:
			Aw::Event::getFieldType = 1

		INPUT:
			Aw::Event self;
			char * field_name;

		CODE:
			AWXS_CLEARERROR

			gErr = self->err = awGetEventFieldType ( self->event, field_name, &RETVAL );

			AWXS_CHECKSETERROR_RETURN

		OUTPUT:
		RETVAL

	CASE:
		INPUT:
			Aw::TypeDef self;
			char * field_name;

		CODE:
			AWXS_CLEARERROR

			gErr = self->err = awGetTypeDefFieldType ( self->type_def, field_name, &RETVAL );
			AWXS_CHECKSETERROR_RETURN

		OUTPUT:
		RETVAL



char *
getTypeName ( self )
	Aw::TypeDef self

	ALIAS:
		Aw::TypeDef::getBaseTypeName  = 1
		Aw::TypeDef::getScopeTypeName = 2
		Aw::TypeDef::getFamilyName    = 3

	CODE:
		AWXS_CLEARERROR

		RETVAL
		= (ix>=2)
		  ? (ix-2)
#ifdef AW_COMPATIBLE
		    ? awGetTypeDefFamilyName ( self->type_def )
#else
		    ? NULL	
#endif /* AW_COMPATIBLE */
		    : awGetTypeDefScopeName ( self->type_def )
		  : (ix)
		    ? awGetTypeDefBaseName ( self->type_def )
		    : awGetTypeDefTypeName ( self->type_def )
		;


		if ( ix == 3 )
#ifndef AW_COMPATIBLE
			{	
			self->errMsg = setErrMsg ( &gErrMsg, 1, "getFamilyName not available: AW_COMPATIBLE was set to false at compile time." );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			}	
#else
		ix = ix;  /* this is really stupid but the #ifndef can't go
					 above the if ( ix == 3 ) line.  Try again later. */
#endif /* AW_COMPATIBLE */

		if ( RETVAL == NULL )
			XSRETURN_UNDEF;

	OUTPUT:
	RETVAL



HV *
toHashRef ( self )
	Aw::TypeDef self

	PREINIT:
		char * string = NULL;
		int number;

	CODE:
		AWXS_CLEARERROR

		RETVAL = newHV();

		gErr = self->err = awxsSetHashFromTypeDef ( self->type_def, RETVAL );

		AWXS_CHECKSETERROR_RETURN

		hv_store ( RETVAL, "_name", 5, newSVpv ( awGetTypeDefTypeName(self->type_def), 0), 0 );

	        gErr = self->err = awGetTypeDefTimeToLive ( self->type_def, &number );
		AWXS_CHECKSETERROR
		if ( self->err == AW_NO_ERROR )
			hv_store ( RETVAL, "_timeToLive", 11, newSViv ( number ), 0 );

	        gErr = self->err = awGetTypeDefStorageType ( self->type_def, &number );
		AWXS_CHECKSETERROR
		if ( self->err == AW_NO_ERROR )
			hv_store ( RETVAL, "_storageType", 12, newSViv ( number ), 0 );

	        gErr = self->err = awGetTypeDefDescription ( self->type_def, &string );
		AWXS_CHECKSETERROR
		if ( self->err == AW_NO_ERROR && string != NULL && string[0] != '\0' )
			hv_store ( RETVAL, "_description", 12, newSVpv ( string, 0), 0 );


	OUTPUT:
		RETVAL
	
	CLEANUP:
		SvREFCNT_dec ( RETVAL );



#===============================================================================

MODULE = Aw			PACKAGE = Aw::TypeDefCache

#===============================================================================

#===============================================================================
#  Aw::TypeDefCache
#	::new
#	::DESTROY-A
#
#	::flushCache			Java-I 15-165
#	::lockCache			Java-I 15-165
#	::unlockCache			Java-I 15-165
#
#       ::err-A   			ala Mysql::
#       ::errmsg-A			ala Mysql::
#       ::error-A
#===============================================================================



Aw::TypeDefCache
new ( CLASS, ... )
	char * CLASS

	CODE:
		RETVAL = (xsBrokerTypeDefCache *)safemalloc ( sizeof(xsBrokerTypeDefCache) );

		if ( RETVAL == NULL ) {
			setErrMsg ( &gErrMsg, 1, "unable to malloc new type def cache" );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

		/* initialize the error cleanly */
		RETVAL->err    = AW_NO_ERROR;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		RETVAL->client = NULL;


		if ( items == 2 ) /* we should test to make sure ST(1) is really a client... */
			RETVAL->client =& AWXS_BROKERCLIENT(1)->client;

	OUTPUT:
	RETVAL



awaBool
flushCache ( self, ... )
	Aw::TypeDefCache self

	CODE:
		AWXS_CLEARERROR

		if ( items == 2 ) /* we should test to make sure ST(1) is really a client... */
			self->client =& AWXS_BROKERCLIENT(1)->client;

		if ( self->client )
			gErr = self->err = awFlushTypeDefCache ( *self->client );
		else {
			self->errMsg = setErrMsg ( &gErrMsg, 1, "(cache)->client is NULL" );
#ifdef AWXS_WARNS
			if ( self->Warn )
				warn ( self->errMsg );
#endif /* AWXS_WARNS */
			gErr = self->err = AW_NO_ERROR;
		}

		AWXS_CHECKSETERROR

		RETVAL = ( self->err == AW_NO_ERROR ) ? awaFalse : awaTrue;

	OUTPUT:
	RETVAL



void
lockCache ( self )
	Aw::TypeDefCache self

	CODE:
		AWXS_CLEARERROR

		awLockTypeDefCache ();



void
unlockCache ( self )
	Aw::TypeDefCache self

	CODE:
		AWXS_CLEARERROR

		awUnlockTypeDefCache ();



#===============================================================================

MODULE = Aw			PACKAGE = Aw::Replies

#===============================================================================

#===============================================================================
#  Aw::Replies
#	::new
#	::DESTROY-A
#
#	::add/::addReplyEvent		Java CADK 7-90
#	::cancel			C CADK 7-67
#	::finish/::finishReplies	Java CADK 7-90
#	::start				C CADK
#===============================================================================



Aw::Replies
new ( CLASS, adapter )
	char * CLASS
	Aw::Adapter adapter

	CODE:
		RETVAL = (xsAdapterReplies *)safemalloc ( sizeof(xsAdapterReplies) );

		if ( RETVAL == NULL ) {
			setErrMsg ( &gErrMsg, 1, "unable to malloc new replies" );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

		RETVAL->handle = adapter->handle;

		// ??  read adapter_helper.h
		//     also destroy maybe should call finish
		// awAdapterReplyEventsStart ( self->handle, batchSize );

	OUTPUT:
	RETVAL



awaBool
addReplyEvent ( self, replyEvent )
	Aw::Replies self
	Aw::Event replyEvent

	ALIAS:
		Aw::Replies::add = 1

	CODE:
		RETVAL = self->eventsAddOk = awAdapterReplyEventsAdd ( self->handle, replyEvent->event );

	OUTPUT:
	RETVAL



void
cancel ( self )
	Aw::Replies self

	CODE:
		awAdapterReplyEventsCancel ( self->handle );



awaBool
finishReplies ( self )
	Aw::Replies self

	ALIAS:
		Aw::Replies::finish = 1

	CODE:
		RETVAL = self->finishOk = awAdapterReplyEventsFinish ( self->handle );

	OUTPUT:
	RETVAL



void
start ( self, batchSize )
	Aw::Replies self
	int batchSize

	CODE:
		awAdapterReplyEventsStart ( self->handle, batchSize );



#===============================================================================

MODULE = Aw			PACKAGE = Aw::SSLCertificate

#===============================================================================

#===============================================================================
#  Aw::SSLCertificate
#	::new
#	::DESTROY-A
#
#	::getBeginDate
#	::getDistinguishedName
#	::getEndDate-A
#	::getIssuerDistinguishedName-A
#	::getStatus
#	::toString-A			   C ??
#===============================================================================



Aw::SSLCertificate
new ( CLASS, certificate_file, password, distinguished_name )
	char * CLASS
	char * certificate_file
	char * password
	char * distinguished_name

	CODE:
		awGetSSLCertificate ( certificate_file, password, distinguished_name, &RETVAL );

	OUTPUT:
	RETVAL



Aw::Date
getBeginDate ( self )
	Aw::SSLCertificate self

	ALIAS:
		Aw::SSLCertificate::getEndDate = 1
		Aw::SSLCertificate::end_date   = 2
		Aw::SSLCertificate::begin_date = 3

	PREINIT:
		char CLASS[] = "Aw::Date";

	CODE:
		RETVAL = (BrokerDate *)safemalloc ( sizeof(BrokerDate) );
		if ( RETVAL == NULL ) {
			setErrMsg ( &gErrMsg, 1, "unable to malloc new date" );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

		
		if (ix%2) {
			memcpy ( RETVAL, &self->end_date, sizeof (BrokerDate) );
		} else {
			memcpy ( RETVAL, &self->begin_date, sizeof (BrokerDate) );
		}

	OUTPUT:
	RETVAL



char *
getDistinguishedName ( self )
	Aw::SSLCertificate self

	ALIAS:
		Aw::SSLCertificate::distinguished_name         = 1
		Aw::SSLCertificate::getIssuerDistinguishedName = 2
		Aw::SSLCertificate::getStatus                  = 3
		Aw::SSLCertificate::issuer_distinguished_name  = 4
		Aw::SSLCertificate::status                     = 5

	CODE:
		RETVAL
		= (ix>1)
		  ? (ix%2)
		    ? self->status
		    : self->issuer_distinguished_name
		  : self->distinguished_name;
		;

	OUTPUT:
	RETVAL



#===============================================================================

MODULE = Aw			PACKAGE = Aw::Subscription

#===============================================================================

#===============================================================================
#  Aw::Subscription
#	::new
#	::DESTROY-A
#
#	::getEventTypeName
#	::getFilter
#	::getSubId
#===============================================================================



Aw::Subscription
new ( CLASS, ... )
	char * CLASS

	CODE:
		RETVAL = (BrokerSubscription *)safemalloc ( sizeof(BrokerSubscription) );

		if ( RETVAL == NULL ) {
			setErrMsg ( &gErrMsg, 1, "unable to malloc new filter" );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

		if ( items > 1 ) {
			char * event_type_name = NULL;
			char * filter          = NULL;
			int    offset          = 0;

			if ( items == 3 )
				++offset;

			RETVAL->sub_id
			= ( offset )
			  ? (int)SvIV (ST(1)) 
			  : 0
			;

			event_type_name  = (char *)SvPV( ST(1 + offset), PL_na );
			filter           = (char *)SvPV( ST(2 + offset), PL_na );

		
			RETVAL->event_type_name = strdup ( event_type_name );
			RETVAL->filter = strdup ( filter );
		}

	OUTPUT:
	RETVAL



char *
getEventTypeName ( self )
	Aw::Subscription self

	ALIAS:
		Aw::Subscription::getFilter       = 1
		Aw::Subscription::filter          = 3
		Aw::Subscription::event_type_name = 2

	CODE:
		if ( ix%2 ) {
#ifdef AW_UNICODE
			RETVAL = awUCtoUTF8 ( self->filter );
#else
			RETVAL = self->filter;
#endif /* AW_UNICODE */
		} else {
#ifdef AW_UNICODE
			RETVAL = awUCtoUTF8 ( self->event_type_name );
#else
			RETVAL = self->event_type_name;
#endif /* AW_UNICODE */
		}

	OUTPUT:
	RETVAL



int
getSubId ( self )
	Aw::Subscription self

	ALIAS:
		Aw::Subscription::sub_id = 1 

	CODE:
		RETVAL = self->sub_id;

	OUTPUT:
	RETVAL



#===============================================================================

MODULE = Aw			PACKAGE = Aw::Util

#===============================================================================

#===============================================================================
#  Aw::Util
#	::new
#	::DESTROY-A
#
#	::clearEventField    		Java CADK 7-91
#	::createEvent    		Java CADK 7-91
#	::createTypedEvent    		   C CADK 6-26
#	::deliverAckReplyEvent		Java CADK 7-92
#	::deliverNullReplyEvent		Java CADK 7-92
#	::deliverPartialReplyEvent	Java CADK 7-92
#	::deliverReplyEvent 		Java CADK 7-93
#	::deliverReplyEvents 		Java CADK 7-93 XX
#	::getBooleanField		Java CADK 7-94 XX
#	::getEventTypeDef		Java CADK 7-94
#	::getIntegerField		Java CADK 7-95 XX
#	::getIntegerSeqField		Java CADK 7-95 XX
#	::getStringField-A		Java CADK 7-96
#	::getStringSeqField		Java CADK 7-97 XX
#	::getStructSeqFieldAsEvents	Java CADK 7-98 XX
#	::initHandle		   	   C CADK 6-41
#	::isEventFieldSet		Java CADK 7-98
#	::newSubscription-A		Java CADK 7-99
#	::publish-A			Java CADK 7-99/7-100
#	::setEventField			Java CADK 7-100
#	::setStringField		Java CADK 7-101
#	::setupEventVerify		Java CADK 7-101 XX
#	::toFormattedString		Java CADK 7-102
#
#       ::err-A   			ala Mysql::
#       ::errmsg-A			ala Mysql::
#	::error-A
#===============================================================================



Aw::Util
new ( CLASS, adapter, ... )
	char  * CLASS
	Aw::Adapter adapter;

	CODE:
		RETVAL = (xsAdapterUtil *)safemalloc ( sizeof(xsAdapterUtil) );

		if ( RETVAL == NULL ) {
			setErrMsg ( &gErrMsg, 1, "unable to malloc new adapter util" );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}

		/* initialize the error cleanly */
		RETVAL->err    = AW_NO_ERROR;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		printf ("Items = %i\n", items);

		RETVAL->adapter = adapter->adapter;
		/*
		 * Some AdapterUtil routines assume a call back handle, others
		 * need a purely new and temporary general purpose handle
		 * (as in the InitHandle -> NewSubscription sequence.
		 *
		 * Those that can _only_ work with a call back handle should
		 * be methods of Adapter and elliminated from AdapterUtil.
		 * Determine which routines these are and remove them later.
		 *
		 *
		 *
		 * RETVAL->handle  = adapter->handle;
		 */

		if ( items > 2 ) {
			/*  
			 *  we are doing init at the same time
			 */ 
			xsBrokerEvent * requestEvent;
			xsAdapterEventType * requestDef;

		
			requestEvent = ( ST(2) )
					? AWXS_BROKEREVENT(2)
					: 0
					;
			requestDef = ( ST(3) )
					? AWXS_ADAPTEREVENTTYPE(3)
					: 0
					;

			RETVAL->handle = (awAdapterHandle *)safemalloc ( sizeof(awAdapterHandle) );
			if ( RETVAL->handle == NULL ) {
				Safefree (RETVAL);
				setErrMsg ( &gErrMsg, 1, "unable to malloc new adapter util" );
#ifdef AWXS_WARNS
				if ( gWarn )
					warn ( gErrMsg );
#endif /* AWXS_WARNS */
				XSRETURN_UNDEF;
			}

			awAdapterInitHandle ( RETVAL->handle, RETVAL->adapter, requestEvent->event, requestDef->adapterET );
		}

	OUTPUT:
	RETVAL



Aw::Event
createEvent ( self, ... )

	ALIAS:
		Aw::Adapter::createEvent      = 1
		Aw::Util::createTypedEvent    = 2
		Aw::Adapter::createTypedEvent = 3
		Aw::Adapter::requestEvent     = 4

	PREINIT:
		char CLASS[] = "Aw::Event";

	CODE:
		AWXS_HANDLE_CLEARERROR(2)
		
		RETVAL = (xsBrokerEvent *)safemalloc ( sizeof(xsBrokerEvent) );	
		if ( RETVAL == NULL ) {
			if (ix && ix != 2)
				AWXS_ADAPTER(0)->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new event" );
			else
				AWXS_ADAPTERUTIL(0)->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new event" );
#ifdef AWXS_WARNS
			if (ix && ix != 2) {
				if ( AWXS_ADAPTER(0)->Warn )
					warn ( AWXS_ADAPTER(0)->errMsg );
			} else {
				if ( AWXS_ADAPTERUTIL(0)->Warn )
					warn ( AWXS_ADAPTERUTIL(0)->errMsg );
			}
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}
		/* initialize the error cleanly */
		RETVAL->err    = NULL;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		gHandle
		= (ix && ix != 2)
		  ? AWXS_ADAPTER(0)->handle
		  : AWXS_ADAPTERUTIL(0)->handle
		;


		RETVAL->event
		= (ix<4)
		  ? (ix<2)
		    ? awAdapterCreateEvent ( gHandle, (char *)SvPV( ST(1), PL_na) )
		    : awAdapterCreateTypedEvent ( gHandle, (char *)SvPV( ST(1), PL_na) )
		  : gHandle->requestEvent
		;


		if ( gHandle == NULL || RETVAL->event == NULL ) {
			Safefree ( RETVAL );
			if (ix && ix != 2)
				AWXS_ADAPTER(0)->errMsg = setErrMsg ( &gErrMsg, 1, "requestEvent: Null Handle" );
			else
				AWXS_ADAPTERUTIL(0)->errMsg = setErrMsg ( &gErrMsg, 1, "requestEvent: Null Handle" );
#ifdef AWXS_WARNS
			if (ix && ix != 2) {
				if ( AWXS_ADAPTER(0)->Warn )
					warn ( AWXS_ADAPTER(0)->errMsg );
			} else {
				if ( AWXS_ADAPTERUTIL(0)->Warn )
					warn ( AWXS_ADAPTERUTIL(0)->errMsg );
			}
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}


		if ( items == 3 )
		  {
			HV * hv;

    			if( SvROK(ST(2)) && (SvTYPE(SvRV(ST(2))) == SVt_PVHV) )
			        hv = (HV*)SvRV( ST(2) );
			    else {
			        warn( "Aw::Event::new() -- hv is not an HV reference" );
			        XSRETURN_UNDEF;
			    };

			gErr = RETVAL->err = awxsSetEventFromHash ( RETVAL->event, hv );

			if ( RETVAL->err != AW_NO_ERROR ) {
				setErrMsg ( &gErrMsg, 2, "unable to instantiate new event: %s", awErrorToCompleteString ( RETVAL->err ) );
				Safefree ( RETVAL );
#ifdef AWXS_WARNS
				if ( gWarn )
					warn ( gErrMsg );
#endif /* AWXS_WARNS */
				XSRETURN_UNDEF;
			}

		  }


		RETVAL->deleteOk = (ix==2) ? 0 : 1;

	OUTPUT:
	RETVAL



awaBool
deliverAckReplyEvent ( self )

	ALIAS:
		Aw::Adapter::deliverAckReplyEvent  = 1
		Aw::Util::deliverNullReplyEvent    = 2
		Aw::Adapter::deliverNullReplyEvent = 3

	CODE:
		AWXS_HANDLE_CLEARERROR(2)
		
		gHandle
		= (ix%2)
		  ? AWXS_ADAPTER(0)->handle
		  : AWXS_ADAPTERUTIL(0)->handle
		;

		RETVAL
		= (ix<2)
		  ? awAdapterDeliverAckReplyEvent  ( gHandle )
		  : awAdapterDeliverNullReplyEvent ( gHandle )
		;

	OUTPUT:
	RETVAL



awaBool
deliverPartialReplyEvent ( self, replyEvent, record, isLast, replyToken )
	Aw::Event replyEvent
	int record
	awaBool isLast
	int replyToken

	ALIAS:
		Aw::Adapter::deliverPartialReplyEvent = 1

	CODE:
		AWXS_HANDLE_CLEARERROR(0)
		
		gHandle
		= (ix)
		  ? AWXS_ADAPTER(0)->handle
		  : AWXS_ADAPTERUTIL(0)->handle
		;

		RETVAL = awAdapterDeliverPartialReplyEvent ( gHandle, replyEvent->event, record, isLast, &replyToken );

	OUTPUT:
	RETVAL



#
#  Yet another style for working with multiple classes:
#    Unwrap class within if { }s
# 
awaBool
deliverReplyEvent ( self, event )
	Aw::Event event

	ALIAS:
		Aw::Adapter::deliverReplyEvent = 1

	CODE:
		AWXS_HANDLE_CLEARERROR(0)
		
		gHandle
		= (ix)
		  ? AWXS_ADAPTER(0)->handle
		  : AWXS_ADAPTERUTIL(0)->handle
		;

		RETVAL = awAdapterDeliverReplyEvent ( gHandle, event->event );

	OUTPUT:
	RETVAL



awaBool
dispatchToSession ( self )

	ALIAS:
		Aw::Adapter::dispatchToSession = 1

	CODE:
		AWXS_HANDLE_CLEARERROR(0)
#if ( AW_VERSION_31 || AW_VERSION_40 )

		gHandle
		= (ix)
		  ? AWXS_ADAPTER(0)->handle
		  : AWXS_ADAPTERUTIL(0)->handle
		;

		RETVAL = awAdapterDispatchToSession ( gHandle );
#else
		warn ( "'dispatchToSessions' available in AW v3.1+.  Recompile Aw.xs if you have reached this warning in error.");
		XSRETURN_UNDEF;
#endif /* ( AW_VERSION_31 || AW_VERSION_40 ) */

	OUTPUT:
	RETVAL



####################################################################
#
#  Yet another style for working with multiple classes:
#    Using cases, class definition is specified in INPUT
# 
#  This is my preferred method when not many self->references are required.
#
####################################################################
Aw::TypeDef
getEventTypeDef ( self, event_name )
	char * event_name

	ALIAS:
		Aw::Adapter::getEventTypeDef = 1

	PREINIT:
		char CLASS[] = "Aw::EventType";
		awaBool test;

	CODE:
		AWXS_HANDLE_CLEARERROR(0)
		
		RETVAL = (xsBrokerTypeDef *)safemalloc ( sizeof(xsBrokerTypeDef) );
		if ( RETVAL == NULL ) {
			if (ix)
				AWXS_ADAPTER(0)->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new event" );
			else
				AWXS_ADAPTERUTIL(0)->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new event" );
#ifdef AWXS_WARNS
			if (ix) {
				if ( AWXS_ADAPTER(0)->Warn )
					warn ( AWXS_ADAPTER(0)->errMsg );
			} else {
				if ( AWXS_ADAPTERUTIL(0)->Warn )
					warn ( AWXS_ADAPTERUTIL(0)->errMsg );
			}
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}
		/* initialize the error cleanly */
		RETVAL->err    = AW_NO_ERROR;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		gHandle
		= (ix)
		  ? AWXS_ADAPTER(0)->handle
		  : AWXS_ADAPTERUTIL(0)->handle
		;

		test = awAdapterGetEventTypeDef ( gHandle, event_name, &RETVAL->type_def );
		
		if ( test == awaFalse ) {
			setErrMsg ( &gErrMsg, 1, "::getEventTypeDef:  awAdapterGetEventTypeDef failed, reason unknown" );
			Safefree ( RETVAL );
#ifdef AWXS_WARNS
			if ( gWarn )
				warn ( gErrMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}	

	OUTPUT:
	RETVAL



awaBool
getBooleanInfo ( self, field_name, ... )
	char * field_name

	ALIAS:
		Aw::Adapter::getBooleanInfo   = 1
		Aw::EventType::getBooleanInfo = 2

	PREINIT:
		awaBool test;

	CODE:
		if (ix < 2) {
			xsBrokerTypeDef * self = AWXS_BROKERTYPEDEF(0);
			AWXS_CLEARERROR
		}
		else {
			AWXS_HANDLE_CLEARERROR(0)
			gHandle
			= (ix)
			  ? AWXS_ADAPTER(0)->handle
			  : AWXS_ADAPTERUTIL(0)->handle
			;
		}
		
		test
		= (ix)
		  ? awAdapterETInfoGetBooleanReq ( gHandle, field_name, &RETVAL )
		  : awAdapterETInfoGetBoolean ( AWXS_ADAPTEREVENTTYPE(0)->adapterET, field_name, &RETVAL )
		;

		if ( test == awaFalse ) {
			if ( items == 3 )
				RETVAL = (awaBool)SvIV ( ST(2) );
			else
				XSRETURN_UNDEF;
		}

	OUTPUT:
	RETVAL



int
getIntegerInfo ( self, field_name, ... )
	char * field_name

	ALIAS:
		Aw::Adapter::getIntegerInfo   = 1
		Aw::EventType::getIntegerInfo = 2

	PREINIT:
		awaBool test;

	CODE:
		if (ix < 2) {
			xsBrokerTypeDef * self = AWXS_BROKERTYPEDEF(0);
			AWXS_CLEARERROR
		}
		else {
			AWXS_HANDLE_CLEARERROR(0)
			gHandle
			= (ix)
			  ? AWXS_ADAPTER(0)->handle
			  : AWXS_ADAPTERUTIL(0)->handle
			;
		}

		test
		= (ix < 2)
		  ? awAdapterETInfoGetIntegerReq ( gHandle, field_name, &RETVAL )
		  : awAdapterETInfoGetInteger ( AWXS_ADAPTEREVENTTYPE(0)->adapterET, field_name, &RETVAL )
		;

		if ( test == awaFalse ) {
			if ( items == 3 )
				RETVAL = (int)SvIV ( ST(2) );
			else
				XSRETURN_UNDEF;
		}

	OUTPUT:
	RETVAL



char *
getStringInfo ( self, field_name, ... )
	char * field_name

	ALIAS:
		Aw::Adapter::getStringInfo           = 1
		Aw::Util::getUCStringInfoAsA         = 2
		Aw::Adapter::getUCStringInfoAsA      = 3
		Aw::Util::getUCStringInfoAsUTF8      = 4
		Aw::Adapter::getUCStringInfoAsUTF8   = 5

		Aw::EventType::getStringInfo         = 6
		Aw::EventType::getUCStringInfoAsA    = 7
		Aw::EventType::getUCStringInfoAsUTF8 = 8

	PREINIT:
		awaBool test;

	CODE:
		if (ix < 6) {
			xsBrokerTypeDef * self = AWXS_BROKERTYPEDEF(0);
			AWXS_CLEARERROR
		}
		else {
			AWXS_HANDLE_CLEARERROR(0)
			gHandle
			= (ix)
			  ? AWXS_ADAPTER(0)->handle
			  : AWXS_ADAPTERUTIL(0)->handle
			;
		}
		
		test
		= (ix > 6)
		  ? (ix==8)
		    ? awAdapterETInfoGetUCStringAsUTF8A ( AWXS_ADAPTEREVENTTYPE(0)->adapterET, field_name, &RETVAL )
		    : (ix-6)
		      ? awAdapterETInfoGetUCStringAsA ( AWXS_ADAPTEREVENTTYPE(0)->adapterET, field_name, &RETVAL )
		      : awAdapterETInfoGetString ( AWXS_ADAPTEREVENTTYPE(0)->adapterET, field_name, &RETVAL )


		  : (ix > 1)
		    ? (ix > 3)
		      ? awAdapterETInfoGetUCStringAsUTF8Req ( gHandle, field_name, &RETVAL )
		      : awAdapterETInfoGetUCStringAsAReq ( gHandle, field_name, &RETVAL )

		    : awAdapterETInfoGetStringReq ( gHandle, field_name, &RETVAL )
		;

		if ( test == awaFalse ) {
			if ( items == 3 )
				RETVAL = (char *)SvPV ( ST(2), PL_na );
			else
				XSRETURN_UNDEF;
		}

	OUTPUT:
	RETVAL



char **
getStringSeqInfoRef ( self, field_name )
	char * field_name

	ALIAS:
		Aw::Adapter::getStringSeqInfoRef           = 1
		Aw::Util::getUCStringSeqInfoAsARef         = 2
		Aw::Adapter::getUCStringSeqInfoAsARef      = 3
		Aw::Util::getUCStringSeqInfoAsUTF8Ref      = 4
		Aw::Adapter::getUCStringSeqInfoAsUTF8Ref   = 5

		Aw::EventType::getStringSeqInfoRef         = 6
		Aw::EventType::getUCStringSeqInfoAsARef    = 7
		Aw::EventType::getUCStringSeqInfoAsUTF8Ref = 8

	PREINIT:
		awaBool test;
		int count_charPtrPtr;

	CODE:
		if (ix < 6) {
			xsBrokerTypeDef * self = AWXS_BROKERTYPEDEF(0);
			AWXS_CLEARERROR
		}
		else {
			AWXS_HANDLE_CLEARERROR(0)
			gHandle
			= (ix)
			  ? AWXS_ADAPTER(0)->handle
			  : AWXS_ADAPTERUTIL(0)->handle
			;
		}
		
		test
		= (ix > 6)
		  ? (ix==8)
		    ? awAdapterETInfoGetUCStringSeqAsUTF8 ( AWXS_ADAPTEREVENTTYPE(0)->adapterET, field_name, &count_charPtrPtr, &RETVAL )
		    : (ix-6)
		      ? awAdapterETInfoGetUCStringSeqAsA ( AWXS_ADAPTEREVENTTYPE(0)->adapterET, field_name, &count_charPtrPtr, &RETVAL )
		      : awAdapterETInfoGetStringSeq ( AWXS_ADAPTEREVENTTYPE(0)->adapterET, field_name, &count_charPtrPtr, &RETVAL )


		  : (ix > 1)
		    ? (ix > 3)
		      ? awAdapterETInfoGetUCStringSeqAsUTF8Req ( gHandle, field_name, &count_charPtrPtr, &RETVAL )
		      : awAdapterETInfoGetUCStringSeqAsAReq ( gHandle, field_name, &count_charPtrPtr, &RETVAL )

		    : awAdapterETInfoGetStringSeqReq ( gHandle, field_name, &count_charPtrPtr, &RETVAL )
		;

		if ( test == awaFalse )
			XSRETURN_UNDEF;

	OUTPUT:
	RETVAL



Aw::Event
findFieldInfo ( self, field_name )
	char * field_name

	ALIAS:
		Aw::Adapter::findFieldInfo   = 1
		Aw::EventType::findFieldInfo = 2

	PREINIT:
		char CLASS[] = "Aw::Event";

	CODE:

		if (ix < 2) {
			xsBrokerTypeDef * self = AWXS_BROKERTYPEDEF(0);
			AWXS_CLEARERROR
		}
		else {
			AWXS_HANDLE_CLEARERROR(0)
			gHandle
			= (ix)
			  ? AWXS_ADAPTER(0)->handle
			  : AWXS_ADAPTERUTIL(0)->handle
			;
		}

		RETVAL = (xsBrokerEvent *)safemalloc ( sizeof(xsBrokerEvent) );	
		if ( RETVAL == NULL ) {
			// self->errMsg = setErrMsg ( &gErrMsg, 1, "Aw::Adapter::getAdapterInfo:  unable to malloc new event" );
			setErrMsg ( &gErrMsg, 1, "Aw::Adapter::getAdapterInfo:  unable to malloc new event" );
#ifdef AWXS_WARNS
			// if ( self->Warn )
			// 	warn ( self->errMsg );
#endif /* AWXS_WARNS */
			XSRETURN_UNDEF;
		}
		/* initialize the error cleanly */
		RETVAL->err    = NULL;
		RETVAL->errMsg = NULL;
		RETVAL->Warn   = gWarn;

		RETVAL->event
		= (ix < 2)
		  ? awAdapterETInfoFindFieldReq ( gHandle, field_name )
		  : awAdapterETInfoFindField ( AWXS_ADAPTEREVENTTYPE(0)->adapterET, field_name )
		;
		if ( !RETVAL->event ) 
			XSRETURN_UNDEF;

	OUTPUT:
	RETVAL



AV *
getStructSeqInfoRef ( self, field_name )
	char * field_name

	ALIAS:
		Aw::Adapter::getStructSeqInfoRef   = 1
		Aw::EventType::getStructSeqInfoRef = 2

	PREINIT:
		int n;
		awaBool test;
		BrokerEvent * events;

	CODE:
		if (ix < 2) {
			xsBrokerTypeDef * self = AWXS_BROKERTYPEDEF(0);
			AWXS_CLEARERROR
		}
		else {
			AWXS_HANDLE_CLEARERROR(0)
			gHandle
			= (ix)
			  ? AWXS_ADAPTER(0)->handle
			  : AWXS_ADAPTERUTIL(0)->handle
			;
		}
		
		test
		= (ix < 2)
		  ? awAdapterETInfoGetStructSeqAsEventsReq ( gHandle, field_name, &n, &events )
		  : awAdapterETInfoGetStructSeqAsEvents ( AWXS_ADAPTEREVENTTYPE(0)->adapterET, field_name, &n, &events )
		;


		if ( test == awaFalse )
			XSRETURN_UNDEF;


		/* now convert reply_events into an AV */
		{
		SV *sv;
		int i;
		xsBrokerEvent * ev;

			RETVAL = newAV();
			for ( i = 0; i<n; i++ ) {
				ev = (xsBrokerEvent *)safemalloc ( sizeof(xsBrokerEvent) );
				if ( ev == NULL ) {
					// self->errMsg = setErrMsg ( &gErrMsg, 1, "unable to malloc new event" );
					setErrMsg ( &gErrMsg, 1, "unable to malloc new event" );
#ifdef AWXS_WARNS
					// if ( self->Warn )
						// warn ( self->errMsg );
#endif /* AWXS_WARNS */
					continue;
				}
				ev->err      = NULL;
				ev->errMsg   = NULL;
				ev->Warn     = gWarn;
				ev->deleteOk = 0;

				ev->event    = events[i];
				
				sv = sv_newmortal();
				sv_setref_pv( sv, "Aw::Event", (void*)ev );
				SvREFCNT_inc(sv);
				av_push( RETVAL, sv );
			}
		}

	OUTPUT:
		RETVAL
	
	CLEANUP:
		SvREFCNT_dec ( RETVAL );



void
initHandle ( self, adapter, event, adapterET )
	Aw::Util self
	Aw::Adapter adapter
	Aw::Event event
	Aw::EventType adapterET

	CODE:
		AWXS_CLEARERROR
		
		awAdapterInitHandle ( self->handle, adapter->adapter, event->event, adapterET->adapterET );



awaBool
publish ( self, event )
	Aw::Event event

	ALIAS:
		Aw::Adapter::publish = 1

	CODE:
		AWXS_HANDLE_CLEARERROR(0)
		
		gHandle
		= (ix)
	  	  ? AWXS_ADAPTER(0)->handle
		  : AWXS_ADAPTERUTIL(0)->handle
		;

		RETVAL = awAdapterPublishEvent ( gHandle, event->event );

	OUTPUT:
	RETVAL



awaBool
setEventField (self, event, field_name, typeDef, value)
	Aw::Event event
	char * field_name
	Aw::TypeDef typeDef
	char * value

	ALIAS:
		Aw::Adapter::setEventField = 1

	CODE:
		AWXS_HANDLE_CLEARERROR(0)
		
		RETVAL
		= (ix)
		  ? awAdapterSetEventField ( event->event, field_name, typeDef->type_def, value, &AWXS_ADAPTER(0)->err )
		  : awAdapterSetEventField ( event->event, field_name, typeDef->type_def, value, &AWXS_ADAPTERUTIL(0)->err )
		;

	OUTPUT:
	RETVAL



awaBool
setStringField ( self, event, field_name, value )
	Aw::Event event
	char * field_name
	char * value

	ALIAS:
		Aw::Adapter::setStringField = 1

	CODE:
		AWXS_HANDLE_CLEARERROR(0)
		
		gHandle
		= (ix)
		  ? AWXS_ADAPTER(0)->handle
		  : AWXS_ADAPTERUTIL(0)->handle
		;

		RETVAL = awAdapterSetStringField ( gHandle, event->event, field_name, value );

	OUTPUT:
	RETVAL



awaBool
setFieldFromString ( self, event, field_name, typeDef, value )
	Aw::Event event
	char * field_name
	Aw::TypeDef typeDef
	char * value

	ALIAS:
		Aw::Adapter::setFieldFromString = 1

	CODE:
		AWXS_HANDLE_CLEARERROR(0)
		
		gHandle
		= (ix)
		  ? AWXS_ADAPTER(0)->handle
		  : AWXS_ADAPTERUTIL(0)->handle
		;

		RETVAL = awAdapterSetFieldFromString ( gHandle, event->event, field_name, typeDef->type_def, value );

	OUTPUT:
	RETVAL



awaBool
setupEventVerify ( self, canSubscribe, canPublish, supportsNotification )
	awaBool	canSubscribe
	awaBool	canPublish
	awaBool supportsNotification

	ALIAS:
		Aw::Adapter::setupEventVerify = 1

	CODE:
		AWXS_HANDLE_CLEARERROR(0)
		
		gHandle
		= (ix)
		  ? AWXS_ADAPTER(0)->handle
		  : AWXS_ADAPTERUTIL(0)->handle
		;

		RETVAL = awAdapterSetupEventVerify ( gHandle, canSubscribe, canPublish, supportsNotification );

	OUTPUT:
	RETVAL



awaBool
isEventFieldSet ( self, event, field_name )
	char * field_name
	Aw::Event event

	ALIAS:
		Aw::Adapter::isEventFieldSet = 1

	CODE:
		AWXS_HANDLE_CLEARERROR(0)
		
		RETVAL = awAdapterIsEventFieldSet ( event->event, field_name );

	OUTPUT:
	RETVAL



char *
toFormattedString ( self, format )
	char * format

	ALIAS:
		Aw::Adapter::toFormattedString = 1

	PREINIT:
		awaBool test;

	CODE:
		AWXS_HANDLE_CLEARERROR(0)
		
		gHandle
		= (ix)
		  ? AWXS_ADAPTER(0)->handle
		  : AWXS_ADAPTERUTIL(0)->handle
		;

		test = awAdapterToFormattedString ( gHandle, format, &RETVAL );
		
		if ( test == awaFalse )
			XSRETURN_UNDEF;

	OUTPUT:
	RETVAL



void
setDateTimeFormat ( self, format )
	char * format

	ALIAS:
		Aw::Date::setDateTimeFormat = 1

	CODE:
		awAdapterSetDateTimeFormat ( format );



#===============================================================================
#
#	End of Module
#
#===============================================================================