예제 #1
0
void SQLFETCHPERF_swap(char* buffer)
{
	short number_of_param = FetchPerf_in_params;
	long* param = (long*)buffer;
	long* pointers = (long*)buffer;

	pointers += number_of_param;

	DIALOGUE_ID_def *dialogueId;
//	IDL_char *stmtLabel;
	IDL_long *maxRowCnt;
	IDL_long *maxRowLen;
	IDL_short *sqlAsyncEnable;
	IDL_long *queryTimeout;

	dialogueId = (IDL_long *)(param[0] + (long)buffer);
	maxRowCnt = (IDL_long *)(param[2] + (long)buffer);
	maxRowLen = (IDL_long *)(param[3] + (long)buffer);
	sqlAsyncEnable = (IDL_short *)(param[4] + (long)buffer);
	queryTimeout = (IDL_long *)(param[5] + (long)buffer);
//
// swap
//
	LONG_swap(dialogueId);
	LONG_swap(maxRowCnt);
	LONG_swap(maxRowLen);
	SHORT_swap(sqlAsyncEnable);
	LONG_swap(queryTimeout);

	swapPointers(buffer, number_of_param);
}
예제 #2
0
void UPDATESRVRSTATE_swap(char* buffer)
{
	short number_of_param = UpdateSrvrState_in_params;
	long* param = (long*)buffer;
	long* pointers = (long*)buffer;

	pointers += number_of_param;

	IDL_long *srvrType; 
//	IDL_char *srvrObjRef;
	IDL_long *srvrState;

	srvrType = (IDL_long *)(param[0] + (long)buffer);
	srvrState = (IDL_long *)(param[2] + (long)buffer);
//
// swap srvrType
//
	LONG_swap(srvrType);
//
// swap srvrState
//
	LONG_swap(srvrState);

	swapPointers(buffer, number_of_param);
	
}
예제 #3
0
void SQLEXECDIRECT_swap(char* buffer)
{
	short number_of_param = ExecDirect_in_params;
	long* param = (long*)buffer;
	long* pointers = (long*)buffer;
	pointers += number_of_param;

	DIALOGUE_ID_def *dialogueId;
//	IDL_char *stmtLabel;
//	IDL_string cursorName;
//	IDL_char *stmtExplainLabel;
	IDL_short* stmtType;
	IDL_short *sqlStmtType;
//	IDL_string sqlString;
	IDL_short *sqlAsyncEnable;
	IDL_long *queryTimeout;

	dialogueId = (IDL_long *)(param[0] + (long)buffer);
	stmtType = (IDL_short *)(param[4] + (long)buffer);
	sqlStmtType = (IDL_short *)(param[5] + (long)buffer);
	sqlAsyncEnable = (IDL_short *)(param[7] + (long)buffer);
	queryTimeout = (IDL_long *)(param[8] + (long)buffer);
//
// swap
//
	LONG_swap(dialogueId);
	SHORT_swap(stmtType);
	SHORT_swap(sqlStmtType);
	SHORT_swap(sqlAsyncEnable);
	LONG_swap(queryTimeout);

	swapPointers(buffer, number_of_param);
}
예제 #4
0
void SQLEXECUTECALL_swap(char* buffer)
{
	short number_of_param = ExecuteCall_in_params;
	long* param = (long*)buffer;
	long* pointers = (long*)buffer;

	pointers += number_of_param;

	DIALOGUE_ID_def *dialogueId;
//	IDL_char *stmtLabel;
//	IDL_string cursorName;
	IDL_short *sqlStmtType;
	IDL_long *inputRowCnt;
	SQLValueList_def *inputValueList;
	IDL_short *sqlAsyncEnable;
	IDL_long *queryTimeout;

	dialogueId = (IDL_long *)(param[0] + (long)buffer);
	sqlStmtType = (IDL_short *)(param[3] + (long)buffer);
	inputRowCnt = (IDL_long *)(param[4] + (long)buffer);
	inputValueList = (SQLValueList_def *)(param[5] + (long)buffer);
	sqlAsyncEnable = (IDL_short *)(param[6] + (long)buffer);
	queryTimeout = (IDL_long *)(param[7] + (long)buffer);
//
// swap
//
	LONG_swap(dialogueId);
	SHORT_swap(sqlStmtType);
	LONG_swap(inputRowCnt);
	SQL_VALUE_LIST_swap(buffer, inputValueList);
	SHORT_swap(sqlAsyncEnable);
	LONG_swap(queryTimeout);

	swapPointers(buffer, number_of_param);
}
예제 #5
0
void STOPSRVR_swap(char* buffer)
{
	short number_of_param = StopSrvr_in_params;
	long* param = (long*)buffer;
	long* pointers = (long*)buffer;

	pointers += number_of_param;

	DIALOGUE_ID_def *dialogueId;
	IDL_long *srvrType; 
//	IDL_char *srvrObjRef;
	IDL_long *StopType;

	dialogueId = (IDL_long *)(param[0] + (long)buffer);
	srvrType = (IDL_long *)(param[1] + (long)buffer);
	StopType = (IDL_long *)(param[3] + (long)buffer);
//
// swap dialogueId
//
	LONG_swap(dialogueId);
//
// swap srvrType
//
	LONG_swap(srvrType);
//
// swap StopType
//
	LONG_swap(StopType);

	swapPointers(buffer, number_of_param);
}
예제 #6
0
void SQL_VALUE_LIST_swap(char* buffer, SQLValueList_def *valueList)
{
	SQLValue_def *_buffer = valueList->_buffer;
	IDL_unsigned_long _length = valueList->_length;

	if (_buffer != NULL && _length != 0 )
	{
		SQLValue_def *pval;
		ULONG_swap(&valueList->_length);
		_buffer = (SQLValue_def *)((long)_buffer + (long)buffer);

		for (unsigned int i=0; i<_length; i++)
		{
			SQL_DataValue_def *pdataValue;
			pval = _buffer + i;

			LONG_swap(&pval->dataType);
			SHORT_swap(&pval->dataInd);
			LONG_swap(&pval->dataCharset);

			pdataValue = &pval->dataValue;
			ULONG_swap(&pdataValue->_length);
		}
	}
}
예제 #7
0
void SQLEXECUTEROWSET_swap(char* buffer)
{
	short number_of_param = ExecuteRowset_in_params;
	long* param = (long*)buffer;
	long* pointers = (long*)buffer;

	pointers += number_of_param;

	DIALOGUE_ID_def *dialogueId;
//	IDL_char *stmtLabel;
//	IDL_string cursorName;
	IDL_short *sqlStmtType;
	IDL_long *inputRowCnt;
	SQL_DataValue_def *inputDataValue;
	IDL_short *sqlAsyncEnable;
	IDL_long *queryTimeout;

	dialogueId = (IDL_long *)(param[0] + (long)buffer);
	sqlStmtType = (IDL_short *)(param[3] + (long)buffer);
	inputRowCnt = (IDL_long *)(param[4] + (long)buffer);
	inputDataValue = (SQL_DataValue_def *)(param[5] + (long)buffer);
	sqlAsyncEnable = (IDL_short *)(param[6] + (long)buffer);
	queryTimeout = (IDL_long *)(param[7] + (long)buffer);
//
// swap
//
	LONG_swap(dialogueId);
	SHORT_swap(sqlStmtType);
	LONG_swap(inputRowCnt);
	ULONG_swap(&inputDataValue->_length);
	SHORT_swap(sqlAsyncEnable);
	LONG_swap(queryTimeout);

	swapPointers(buffer, number_of_param);
}
예제 #8
0
void SQLPREPARE_swap(char* buffer)
{
	short number_of_param = Prepare_in_params;
	long* param = (long*)buffer;
	long* pointers = (long*)buffer;
	pointers += number_of_param;

	DIALOGUE_ID_def *dialogueId;
//	IDL_char *stmtLabel;
//	IDL_char *stmtExplainLabel;
	IDL_short *stmtType;
//	IDL_string sqlString;
	IDL_short *sqlAsyncEnable;
	IDL_long *queryTimeout;

	dialogueId = (IDL_long *)(param[0] + (long)buffer);
	stmtType = (IDL_short *)(param[3] + (long)buffer);;
	sqlAsyncEnable = (IDL_short *)(param[5] + (long)buffer);;
	queryTimeout = (IDL_long *)(param[6] + (long)buffer);;
//
// swap
//
	LONG_swap(dialogueId);
	SHORT_swap(stmtType);
	SHORT_swap(sqlAsyncEnable);
	LONG_swap(queryTimeout);

	swapPointers(buffer, number_of_param);
}
예제 #9
0
void SQLSETCONNECTATTR_swap(char* buffer)
{
	short number_of_param = SetConnectionOption_in_params;
	long* param = (long*)buffer;
	long* pointers = (long*)buffer;

	pointers += number_of_param;

	DIALOGUE_ID_def *dialogueId;
	IDL_short *connectionOption;
	IDL_long *optionValueNum;
//	IDL_string optionValueStr;

	dialogueId = (IDL_long *)(param[0] + (long)buffer);
	connectionOption = (IDL_short *)(param[1] + (long)buffer);;
	optionValueNum = (IDL_long *)(param[2] + (long)buffer);;
//
// swap
//
	LONG_swap(dialogueId);
	SHORT_swap(connectionOption);
	LONG_swap(optionValueNum);

	swapPointers(buffer, number_of_param);
}
예제 #10
0
void SQL_ITEM_DESC_LIST_swap(char* buffer, SQLItemDescList_def *itemList)
{
	SQLItemDesc_def *_buffer = itemList->_buffer;
	IDL_unsigned_long _length = itemList->_length;

	if (_buffer != NULL && _length != 0 )
	{
		SQLItemDesc_def *pitem;
		ULONG_swap(&itemList->_length);
		_buffer = (SQLItemDesc_def *)((long)_buffer + (long)buffer);

		for (unsigned int i=0; i<_length; i++)
		{
			pitem = _buffer + i;

			LONG_swap(&pitem->version);
			LONG_swap(&pitem->dataType);
			LONG_swap(&pitem->datetimeCode);
			LONG_swap(&pitem->maxLen);
			SHORT_swap(&pitem->precision);
			SHORT_swap(&pitem->scale);
			LONG_swap(&pitem->ODBCDataType);
			SHORT_swap(&pitem->ODBCPrecision);
			LONG_swap(&pitem->SQLCharset);
			LONG_swap(&pitem->ODBCCharset);
			LONG_swap(&pitem->intLeadPrec);
			LONG_swap(&pitem->paramMode);
		}
	}
}
예제 #11
0
void HEADER_swap(HEADER* header)
{
	SHORT_swap(&header->operation_id);
	LONG_swap(&header->dialogueId);
	ULONG_swap(&header->total_length);
	ULONG_swap(&header->cmp_length);
	LONG_swap((IDL_long*)&header->hdr_type);
	ULONG_swap(&header->signature);
	ULONG_swap(&header->version);
	SHORT_swap(&header->error);
	SHORT_swap(&header->error_detail);
}
예제 #12
0
void GETOBJREF_swap(char* buffer)
{
	short number_of_param = GetObjRefHdl_in_params;
	long* param = (long*)buffer;
	long* pointers = (long*)buffer;

	pointers += number_of_param;

	CONNECTION_CONTEXT_def *inContext; 
	USER_DESC_def *userDesc;
	IDL_long *srvrType;
	IDL_short *retryCount;

	inContext = (CONNECTION_CONTEXT_def *)(param[0] + (long)buffer); 
	userDesc = (USER_DESC_def *)(param[1] + (long)buffer);
	srvrType = (IDL_long *)(param[2] + (long)buffer);
	retryCount = (IDL_short *)(param[3] + (long)buffer);
//
// swap CONNECTION_CONTEXT_def
//
	SHORT_swap(&inContext->accessMode);
	SHORT_swap(&inContext->autoCommit);
	SHORT_swap(&inContext->queryTimeoutSec);
	SHORT_swap(&inContext->idleTimeoutSec);
	SHORT_swap(&inContext->loginTimeoutSec);
	SHORT_swap(&inContext->txnIsolationLevel);
	SHORT_swap(&inContext->rowSetSize);
	LONG_swap(&inContext->diagnosticFlag);
	ULONG_swap(&inContext->processId);
	ULONG_swap(&inContext->ctxACP);
	ULONG_swap(&inContext->ctxDataLang);
	ULONG_swap(&inContext->ctxErrorLang);
	SHORT_swap(&inContext->ctxCtrlInferNCHAR);
	VERSION_LIST_swap(buffer, &inContext->clientVersionList);
//
// swap userDesc
//
	LONG_swap(&userDesc->userDescType);
	ULONG_swap(&userDesc->userSid._length);
	ULONG_swap(&userDesc->password._length);
//
// swap srvrType
//
	LONG_swap(srvrType);
//
// swap retryCount
//
	SHORT_swap(retryCount);

	swapPointers(buffer, number_of_param);
	
}
예제 #13
0
void SQLCONNECT_swap(char* buffer)
{
	short number_of_param = InitializeDialogue_in_params;
	long* param = (long*)buffer;
	long* pointers = (long*)buffer;

	pointers += number_of_param;

	USER_DESC_def *userDesc; 
	CONNECTION_CONTEXT_def *inContext;
	DIALOGUE_ID_def *dialogueId;

	userDesc = (USER_DESC_def *)(param[0] + (long)buffer);
	inContext = (CONNECTION_CONTEXT_def *)(param[1] + (long)buffer); 
	dialogueId = (IDL_long *)(param[2] + (long)buffer);
//
// swap userDesc
//
	LONG_swap(&userDesc->userDescType);
	ULONG_swap(&userDesc->userSid._length);
	ULONG_swap(&userDesc->password._length);
//
// swap CONNECTION_CONTEXT_def
//
	SHORT_swap(&inContext->accessMode);
	SHORT_swap(&inContext->autoCommit);
	SHORT_swap(&inContext->queryTimeoutSec);
	SHORT_swap(&inContext->idleTimeoutSec);
	SHORT_swap(&inContext->loginTimeoutSec);
	SHORT_swap(&inContext->txnIsolationLevel);
	SHORT_swap(&inContext->rowSetSize);
	LONG_swap(&inContext->diagnosticFlag);
	ULONG_swap(&inContext->processId);
	ULONG_swap(&inContext->ctxACP);
	ULONG_swap(&inContext->ctxDataLang);
	ULONG_swap(&inContext->ctxErrorLang);
	SHORT_swap(&inContext->ctxCtrlInferNCHAR);
	VERSION_LIST_swap(buffer, &inContext->clientVersionList);
//
// swap DIALOGUE_ID_def
//
	LONG_swap(dialogueId);

	swapPointers(buffer, number_of_param);
}
예제 #14
0
void SQL_WARNING_OR_ERROR_swap(BYTE *WarningOrError, IDL_long WarningOrErrorLengthCheck,char swap)
{

	IDL_long msg_total_len = 0;
	
	IDL_long numConditions = 0;
	char sqlState[6];
	IDL_long errorTextLen = 0;

	unsigned char *curptr;
	int i;
		
	if (swap == SWAP_NO) return;
		
	curptr = (unsigned char *)WarningOrError;

	//swap numConditions and then pull it out, for indexing
	LONG_swap((IDL_long*)(curptr+msg_total_len),swap);
	numConditions = *(IDL_long*)(curptr+msg_total_len);
	msg_total_len +=4;

	if (numConditions > 0)
	{
		for (i = 0; i < numConditions; i++)
		{
			//rowId= *(IDL_long*)(curptr+msg_total_len);
			LONG_swap((IDL_long*)(curptr+msg_total_len),swap);
			msg_total_len +=4;

			//sqlCode= *(IDL_long*)(curptr+msg_total_len);
			LONG_swap((IDL_long*)(curptr+msg_total_len),swap);
			msg_total_len +=4;

			//swap errorTextLen then grab it
			LONG_swap((IDL_long*)(curptr+msg_total_len),swap);
			errorTextLen= *(IDL_long*)(curptr+msg_total_len);
			msg_total_len +=4;
			msg_total_len +=errorTextLen;
			
			msg_total_len +=sizeof(sqlState);
		}
	}
}
예제 #15
0
void ERROR_DESC_LIST_swap(char* buffer, ERROR_DESC_LIST_def *errorList)
{
	ERROR_DESC_def *_buffer = errorList->_buffer;
	IDL_unsigned_long _length = errorList->_length;

	if (_buffer != NULL && _length != 0 )
	{
		ERROR_DESC_def *perr;
		ULONG_swap(&errorList->_length);
		_buffer = (ERROR_DESC_def *)((long)_buffer + (long)buffer);

		for (unsigned int i=0; i<_length; i++)
		{
			perr = _buffer + i;
			LONG_swap(&perr->rowId);
			LONG_swap(&perr->errorDiagnosticId);
			LONG_swap(&perr->sqlcode);
			LONG_swap(&perr->operationAbortId);
			LONG_swap(&perr->errorCodeType);
		}
	}
}
예제 #16
0
void SQLDISCONNECT_swap(char* buffer)
{
	short number_of_param = TerminateDialogue_in_params;
	long* param = (long*)buffer;
	long* pointers = (long*)buffer;

	pointers += number_of_param;

	DIALOGUE_ID_def *dialogueId;

	dialogueId = (IDL_long *)(param[0] + (long)buffer);
//
// swap DIALOGUE_ID_def
//
	LONG_swap(dialogueId);

	swapPointers(buffer, number_of_param);
}
예제 #17
0
void SQLGETCATALOGS_swap(char* buffer)
{
	short number_of_param = GetSQLCatalogs_in_params;
	long* param = (long*)buffer;
	long* pointers = (long*)buffer;

	pointers += number_of_param;

	DIALOGUE_ID_def *dialogueId;
//	IDL_char *stmtLabel;
	IDL_short *APIType;
//	IDL_char *catalogNm;
//	IDL_char *schemaNm;
//	IDL_char *tableNm;
//	IDL_char *tableTypeList;
//	IDL_char *columnNm;
	IDL_long *columnType;
	IDL_long *rowIdScope;
	IDL_long *nullable;
	IDL_long *uniqueness;
	IDL_long *accuracy;
	IDL_short *sqlType;
	IDL_unsigned_long *metadataId;

	dialogueId = (IDL_long *)(param[0] + (long)buffer);
	APIType = (IDL_short *)(param[2] + (long)buffer);
	columnType = (IDL_long *)(param[8] + (long)buffer);
	rowIdScope = (IDL_long *)(param[9] + (long)buffer);
	nullable = (IDL_long *)(param[10] + (long)buffer);
	uniqueness = (IDL_long *)(param[11] + (long)buffer);
	accuracy = (IDL_long *)(param[12] + (long)buffer);
	sqlType = (IDL_short *)(param[13] + (long)buffer);
	metadataId = (IDL_unsigned_long *)(param[14] + (long)buffer);
//
// swap
//
	LONG_swap(dialogueId);
	SHORT_swap(APIType);
	LONG_swap(columnType);
	LONG_swap(rowIdScope);
	LONG_swap(nullable);
	LONG_swap(uniqueness);
	LONG_swap(accuracy);
	SHORT_swap(sqlType);
	ULONG_swap(metadataId);

	swapPointers(buffer, number_of_param);
}
예제 #18
0
void SQLENDTRAN_swap(char* buffer)
{
	short number_of_param = EndTransaction_in_params;
	long* param = (long*)buffer;
	long* pointers = (long*)buffer;

	pointers += number_of_param;

	DIALOGUE_ID_def *dialogueId;
	IDL_unsigned_short *transactionOpt;

	dialogueId = (IDL_long *)(param[0] + (long)buffer);
	transactionOpt = (IDL_unsigned_short *)(param[1] + (long)buffer);
//
// swap
//
	LONG_swap(dialogueId);
	USHORT_swap(transactionOpt);

	swapPointers(buffer, number_of_param);
}
예제 #19
0
void SQLFREESTMT_swap(char* buffer)
{
	short number_of_param = Close_in_params;
	long* param = (long*)buffer;
	long* pointers = (long*)buffer;

	pointers += number_of_param;

	DIALOGUE_ID_def *dialogueId;
//	IDL_char *stmtLabel
	IDL_unsigned_short *freeResourceOpt;

	dialogueId = (IDL_long *)(param[0] + (long)buffer);
	freeResourceOpt = (IDL_unsigned_short *)(param[2] + (long)buffer);
//
// swap
//
	LONG_swap(dialogueId);
	USHORT_swap(freeResourceOpt);

	swapPointers(buffer, number_of_param);
}
예제 #20
0
extern "C" CEE_status
odbcas_ASSvc_GetObjRefHdl_(
    /* In    */ const CEE_handle_def *ph_
  , /* In    */ CEE_tag_def tag_
  , /* In    */ const CONNECTION_CONTEXT_def *inContext
  , /* In    */ const USER_DESC_def *userDesc
  , /* In    */ IDL_long srvrType
  , /* In    */ IDL_short retryCount
  , /* Out   */ odbcas_ASSvc_GetObjRefHdl_exc_ *exception_
  , /* Out   */	char 				*srvrObjRef
  , /* Out   */ DIALOGUE_ID_def 	*dialogueId
  , /* Out   */ char 				*dataSource
  , /* Out   */ USER_SID_def 		*userSid
  , /* Out   */ VERSION_LIST_def 	*versionList
  , /* Out   */ IDL_long		 	*isoMapping
  , /* Out   */ IDL_long		 	*srvrNodeId
  , /* Out   */ IDL_long		 	*srvrProcessId
  , /* Out   */ IDL_long_long	 	*timestamp
  )
{
	CEE_status retcode;
	bool sts;
	IDL_long wlength,rlength;
	IDL_char* wbuffer, *rbuffer;
	IDL_char* curptr;

	IDL_long msg_total_length = 0;
	IDL_long exceptionLength = 0;
	IDL_long datasourceLength = 0;
	IDL_long srvrObjRefLength = 0;
	IDL_long userSidLength = 0;
	IDL_long clusternameLength = 0;

	VERSION_def version[4];
	VERSION_def* versionPtr = &version[0];

	char srvrHostName[100] = {0};
	IDL_long srvrHostNameLength = 0;
	char srvrProcessName[100] = {0};
	IDL_long srvrProcessNameLength = 0;
	char srvrIpAddress[100] = {0};
	IDL_long srvrIpAddressLength = 0;
	IDL_long srvrPort = 0;
	
	SRVR_CALL_CONTEXT *srvrCallContext = (SRVR_CALL_CONTEXT *)tag_;
	CConnect *pConnection = (CConnect *)srvrCallContext->sqlHandle;

	pConnection->m_asTCPIPSystem->odbcAPI = AS_API_GETOBJREF;
	pConnection->m_asTCPIPSystem->dialogueId = srvrCallContext->dialogueId;
	pConnection->m_asTCPIPSystem->dwTimeout = srvrCallContext->u.connectParams.loginTimeout;

//
// do marshaling of input parameters
//
	retcode = odbcas_ASSvc_GetObjRefHdl_param_pst_(
		  pConnection->m_asTCPIPSystem
		, wbuffer
		, wlength
		, inContext
		, userDesc
		, srvrType
		, retryCount);

	if (retcode != CEE_SUCCESS)
		return retcode;

	sts = OpenIO (pConnection->m_asTCPIPSystem,pConnection->getAsObjRef());
	if (sts == false)
		return MAP_AS_ERRORS((long)pConnection->m_asTCPIPSystem);

	sts = DoIO (pConnection->m_asTCPIPSystem, wbuffer, wlength, rbuffer, rlength,pConnection);
 	if (sts == false)
		return MAP_AS_ERRORS((long)pConnection->m_asTCPIPSystem);

	CloseIO (pConnection->m_asTCPIPSystem);

//
// process output parameters
//
	char swap = pConnection->m_asTCPIPSystem->swap();

	curptr = rbuffer;
	//
	// copy odbcas_ASSvc_GetObjRefHdl_exc_ *exception_
	//

	exception_->exception_nr = *(IDL_long *)(curptr + msg_total_length);
	msg_total_length += sizeof(exception_->exception_nr);
	LONG_swap(&exception_->exception_nr,swap);

	exception_->exception_detail = *(IDL_long *)(curptr + msg_total_length);
	msg_total_length += sizeof(exception_->exception_detail);
	LONG_swap(&exception_->exception_detail,swap);

	exceptionLength = *(IDL_long *)(curptr + msg_total_length);
	msg_total_length += sizeof(exceptionLength);
	LONG_swap(&exceptionLength,swap);

    if(exceptionLength > 0)
	{
       exception_->u.ASParamError.ErrorText = (IDL_char*)(curptr+msg_total_length);
       msg_total_length += exceptionLength;
	   return CEE_SUCCESS; // no point in continuing
	}

	//
	// copy DIALOGUE_ID_def dialogueId
	//
	*dialogueId = *(IDL_long *) (curptr + msg_total_length);
	msg_total_length += sizeof(*dialogueId);
	LONG_swap(dialogueId,swap);
	//
	// copy IDL_char *dataSource
	//
	datasourceLength = *(IDL_long *)(curptr + msg_total_length);
	msg_total_length += sizeof(datasourceLength);
	LONG_swap(&datasourceLength,swap);
	if (datasourceLength != 0)
	{
		memcpy(dataSource, curptr + msg_total_length, datasourceLength);
		msg_total_length += datasourceLength;
	}

	// copy userSidLength
	userSid->_length = *(IDL_unsigned_long *)(curptr+msg_total_length);
	msg_total_length += sizeof(userSid->_length);
	ULONG_swap(&userSid->_length,swap);

	// copy userSid
	if (userSid->_length != 0)
	{
        userSid->_buffer = (unsigned char *)(IDL_char*)(curptr+msg_total_length);
		msg_total_length += userSid->_length+1;
	}

	// copy VERSION_LIST_def *versionList
	
	versionList->_length = *(IDL_unsigned_long *)(curptr + msg_total_length);
	msg_total_length += sizeof(versionList->_length);
	ULONG_swap(&versionList->_length,swap);

	// Get the versionPtr
	versionList->_buffer = (VERSION_def *)new char[versionList->_length*sizeof(VERSION_def)];
	versionPtr = versionList->_buffer; 
	
	for (int i = 0; i < versionList->_length; i++)
	{
		// copy componentId
		versionPtr->componentId = *(IDL_short *)(curptr + msg_total_length);
		msg_total_length += sizeof(versionPtr->componentId);
		SHORT_swap(&versionPtr->componentId,swap);

		// copy majorVersion
		versionPtr->majorVersion = *(IDL_short *)(curptr + msg_total_length);
		msg_total_length += sizeof(versionPtr->majorVersion);
		SHORT_swap(&versionPtr->majorVersion,swap);

		// copy minorVersion
		versionPtr->minorVersion = *(IDL_short *)(curptr + msg_total_length);
		msg_total_length += sizeof(versionPtr->minorVersion);
		SHORT_swap(&versionPtr->minorVersion,swap);

		// copy buildId
		versionPtr->buildId = *(IDL_unsigned_long *)(curptr + msg_total_length);
		msg_total_length += sizeof(versionPtr->buildId);
		ULONG_swap(&versionPtr->buildId,swap);
		
		// Get the next versionlist values
		versionPtr++;
	}

	//Check whether connected to an R2.3 server
	if (versionList->_buffer->buildId & CHARSET)
	{
		//
		// copy IDL_long isoMapping
		//
		*isoMapping = *(IDL_long *) (curptr + msg_total_length);
		msg_total_length += sizeof(*isoMapping);
	LONG_swap(isoMapping,swap);
	}
	else
		*isoMapping = NON_CHARSET_SYSTEM ; //Connected to an R2.2 system.

	//
	// copy IDL_char *srvrHostName
	//
	srvrHostNameLength = *(IDL_long *)(curptr + msg_total_length);
	msg_total_length += sizeof(srvrHostNameLength);
	LONG_swap(&srvrHostNameLength,swap);
	if (srvrHostNameLength != 0)
	{
		memcpy(srvrHostName, curptr + msg_total_length, srvrHostNameLength);
		msg_total_length += srvrHostNameLength;
	}
	//
	// copy IDL_long srvrNodeId
	//
	*srvrNodeId = *(IDL_long *) (curptr + msg_total_length);
	msg_total_length += sizeof(*srvrNodeId);
	LONG_swap(srvrNodeId,swap);
	//
	// copy IDL_long srvrProcessId
	//
	*srvrProcessId = *(IDL_long *) (curptr + msg_total_length);
	msg_total_length += sizeof(*srvrProcessId);
	LONG_swap(srvrProcessId,swap);
	//
	// copy IDL_char *srvrProcessName
	//
	srvrProcessNameLength = *(IDL_long *)(curptr + msg_total_length);
	msg_total_length += sizeof(srvrProcessNameLength);
	LONG_swap(&srvrProcessNameLength,swap);
	if (srvrProcessNameLength != 0)
	{
		memcpy(srvrProcessName, curptr + msg_total_length, srvrProcessNameLength);
		msg_total_length += srvrProcessNameLength;
	}
	//
	// copy IDL_char *srvrIpAddress
	//
	srvrIpAddressLength = *(IDL_long *)(curptr + msg_total_length);
	msg_total_length += sizeof(srvrIpAddressLength);
	LONG_swap(&srvrIpAddressLength,swap);
	if (srvrProcessNameLength != 0)
	{
		memcpy(srvrIpAddress, curptr + msg_total_length, srvrIpAddressLength);
		msg_total_length += srvrIpAddressLength;
	}
	//
	// copy IDL_long srvrPort
	//
	srvrPort = *(IDL_long *) (curptr + msg_total_length);
	msg_total_length += sizeof(srvrPort);
	LONG_swap(&srvrPort,swap);

	sprintf(srvrObjRef,"TCP:%s:%d.%s,%s/%d:ODBC", srvrHostName, *srvrNodeId, srvrProcessName, srvrIpAddress, srvrPort);


	//Check whether connected to server with password security support
	if (versionList->_buffer->buildId & PASSWORD_SECURITY)
	{
		//
		// copy IDL_long_long timestamp
		//
		*timestamp = *(IDL_long_long *) (curptr + msg_total_length);
		msg_total_length += sizeof(*timestamp);
		LONGLONG_swap(timestamp,swap);

		//
		// copy clustername
		//
		clusternameLength = *(IDL_long *)(curptr + msg_total_length);
		msg_total_length += sizeof(clusternameLength);
		LONG_swap(&clusternameLength,swap);
		if (clusternameLength != 0)
		{
			memcpy(pConnection->m_ClusterName, curptr + msg_total_length, clusternameLength);
			msg_total_length += clusternameLength;
		}

	}
	return CEE_SUCCESS;
}
예제 #21
0
/*
 * Synchronous object call for
 * operation 'odbcas_ASSvc_StopSrvr'
 */
extern "C" void
odbcas_ASSvc_StopSrvr(
    /* In    */ const CEE_handle_def *ph_
  , /* Out   */ struct odbcas_ASSvc_StopSrvr_exc_ *exception_
  , /* In    */ DIALOGUE_ID_def dialogueId
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  , /* In    */ IDL_long StopType
  )
{
	CEE_status retcode;
	bool sts;
	IDL_char *curptr;
	IDL_long  msg_total_len = 0;
	IDL_long  wlength,  rlength;
	IDL_char *wbuffer, *rbuffer;

	SRVR_CALL_CONTEXT *srvrCallContext = (SRVR_CALL_CONTEXT *)ph_;
	CConnect *pConnection = (CConnect *)srvrCallContext->sqlHandle;

	pConnection->m_asTCPIPSystem->odbcAPI = AS_API_STOPSRVR;
	pConnection->m_asTCPIPSystem->dialogueId = srvrCallContext->dialogueId;
	pConnection->m_asTCPIPSystem->dwTimeout = srvrCallContext->u.connectParams.loginTimeout;
//
// do marshaling of input parameters
//
	retcode = odbcas_ASSvc_StopSrvr_param_pst_(
		  pConnection->m_asTCPIPSystem
		, wbuffer
		, wlength
		, dialogueId
		, srvrType
		, srvrObjRef
		, StopType);

	if (retcode != CEE_SUCCESS)
		return;

	sts = OpenIO (pConnection->m_asTCPIPSystem,pConnection->getAsObjRef());
	if (sts == false)
		return;

	sts = DoIO (pConnection->m_asTCPIPSystem, wbuffer, wlength, rbuffer, rlength,pConnection);
	if (sts == false)
		return;

	CloseIO (pConnection->m_asTCPIPSystem);


//
// process output parameters
//

	char swap = pConnection->m_asTCPIPSystem->swap();

    msg_total_len = 0;
	curptr = rbuffer;

//
//  exception_
//

	IDL_long ExceptionLength;

//
//   exception_ ->exception_nr
//
	exception_->exception_nr = *(IDL_long*)(curptr+msg_total_len);
	msg_total_len += sizeof(exception_->exception_nr);
	LONG_swap(&exception_->exception_nr,swap);

//
//   exception_ ->exception_detail
//
	exception_->exception_detail = *(IDL_long*)(curptr+msg_total_len);
	msg_total_len += sizeof(exception_->exception_detail);
	LONG_swap(&exception_->exception_detail,swap);

    ExceptionLength = *(IDL_long*)(curptr+msg_total_len);
    msg_total_len += sizeof(ExceptionLength);
	LONG_swap(&ExceptionLength,swap);

	if(ExceptionLength > 0)
	{
	   exception_->u.ASParamError.ErrorText = (IDL_char*)(curptr+msg_total_len);
	   msg_total_len += ExceptionLength;
	}
  
	return;
}