openmohaa/code/gamespy/sake/sakeRequestMisc.c
2023-02-04 21:00:01 +01:00

177 lines
5.5 KiB
C

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#include "sakeRequestInternal.h"
#include "sakeRequest.h"
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// Rate Record
static SAKEStartRequestResult SAKE_CALL sakeiRateRecordValidateInput(SAKERequest request)
{
SAKERateRecordInput *input = (SAKERateRecordInput *)request->mInput;
// check the tableid
if(!input->mTableId)
return SAKEStartRequestResult_BAD_TABLEID;
return SAKEStartRequestResult_SUCCESS;
}
static SAKEStartRequestResult SAKE_CALL sakeiRateRecordFillSoapRequest(SAKERequest request)
{
SAKERateRecordInput *input = (SAKERateRecordInput *)request->mInput;
// write the table id
gsXmlWriteStringElement(request->mSoapRequest, GSI_SAKE_SERVICE_NAMESPACE, "tableid", input->mTableId);
// write the recordid
gsXmlWriteIntElement(request->mSoapRequest, GSI_SAKE_SERVICE_NAMESPACE, "recordid", (gsi_u32)input->mRecordId);
// write the rating
gsXmlWriteIntElement(request->mSoapRequest, GSI_SAKE_SERVICE_NAMESPACE, "rating", (gsi_u32)input->mRating);
return SAKEStartRequestResult_SUCCESS;
}
static SAKERequestResult sakeiRateRecordProcessSoapResponse(SAKERequest request)
{
SAKERateRecordOutput *output = (SAKERateRecordOutput *)request->mOutput;
if(gsi_is_false(gsXmlReadChildAsInt(request->mSoapResponse, "numRatings", &output->mNumRatings)) ||
gsi_is_false(gsXmlReadChildAsFloat(request->mSoapResponse, "averageRating", &output->mAverageRating)))
{
return SAKERequestResult_MALFORMED_RESPONSE;
}
return SAKERequestResult_SUCCESS;
}
SAKEStartRequestResult SAKE_CALL sakeiStartRateRecordRequest(SAKERequest request)
{
static SAKEIRequestInfo info =
{
sizeof(SAKERateRecordOutput),
SAKEI_FUNC_NAME_STRINGS("RateRecord"),
sakeiRateRecordValidateInput,
sakeiRateRecordFillSoapRequest,
sakeiRateRecordProcessSoapResponse
};
return sakeiStartRequest(request, &info);
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// Get Record Limit
static SAKEStartRequestResult SAKE_CALL sakeiGetRecordLimitValidateInput(SAKERequest request)
{
SAKEGetRecordLimitInput *input = (SAKEGetRecordLimitInput *)request->mInput;
// check the tableid
if(!input->mTableId)
return SAKEStartRequestResult_BAD_TABLEID;
return SAKEStartRequestResult_SUCCESS;
}
static SAKEStartRequestResult SAKE_CALL sakeiGetRecordLimitFillSoapRequest(SAKERequest request)
{
SAKEGetRecordLimitInput *input = (SAKEGetRecordLimitInput *)request->mInput;
// write the table id
gsXmlWriteStringElement(request->mSoapRequest, GSI_SAKE_SERVICE_NAMESPACE, "tableid", input->mTableId);
return SAKEStartRequestResult_SUCCESS;
}
static SAKERequestResult sakeiGetRecordLimitProcessSoapResponse(SAKERequest request)
{
SAKEGetRecordLimitOutput *output = (SAKEGetRecordLimitOutput *)request->mOutput;
if(gsi_is_false(gsXmlReadChildAsInt(request->mSoapResponse, "limitPerOwner", &output->mLimitPerOwner)) ||
gsi_is_false(gsXmlReadChildAsInt(request->mSoapResponse, "numOwned", &output->mNumOwned)))
{
return SAKERequestResult_MALFORMED_RESPONSE;
}
return SAKERequestResult_SUCCESS;
}
SAKEStartRequestResult SAKE_CALL sakeiStartGetRecordLimitRequest(SAKERequest request)
{
static SAKEIRequestInfo info =
{
sizeof(SAKEGetRecordLimitOutput),
SAKEI_FUNC_NAME_STRINGS("GetRecordLimit"),
sakeiGetRecordLimitValidateInput,
sakeiGetRecordLimitFillSoapRequest,
sakeiGetRecordLimitProcessSoapResponse
};
return sakeiStartRequest(request, &info);
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// Get Record Count
static SAKEStartRequestResult SAKE_CALL sakeiGetRecordCountValidateInput(SAKERequest request)
{
SAKEGetRecordCountInput *input = (SAKEGetRecordCountInput *)request->mInput;
// check the tableid
if(!input->mTableId)
return SAKEStartRequestResult_BAD_TABLEID;
return SAKEStartRequestResult_SUCCESS;
}
static SAKEStartRequestResult SAKE_CALL sakeiGetRecordCountFillSoapRequest(SAKERequest request)
{
SAKEGetRecordCountInput *input = (SAKEGetRecordCountInput *)request->mInput;
// write the table id
gsXmlWriteStringElement(request->mSoapRequest, GSI_SAKE_SERVICE_NAMESPACE, "tableid", input->mTableId);
// write the filter
if(input->mFilter != NULL)
gsXmlWriteTStringElement(request->mSoapRequest, GSI_SAKE_SERVICE_NAMESPACE, "filter", input->mFilter);
// write the cache flag
gsXmlWriteIntElement(request->mSoapRequest, GSI_SAKE_SERVICE_NAMESPACE, "cacheFlag", (gsi_u32)input->mCacheFlag);
return SAKEStartRequestResult_SUCCESS;
}
static SAKERequestResult sakeiGetRecordCountProcessSoapResponse(SAKERequest request)
{
SAKEGetRecordCountOutput *output = (SAKEGetRecordCountOutput *)request->mOutput;
if(gsi_is_false(gsXmlReadChildAsInt(request->mSoapResponse, "count", &output->mCount)))
{
return SAKERequestResult_MALFORMED_RESPONSE;
}
return SAKERequestResult_SUCCESS;
}
SAKEStartRequestResult SAKE_CALL sakeiStartGetRecordCountRequest(SAKERequest request)
{
static SAKEIRequestInfo info =
{
sizeof(SAKEGetRandomRecordOutput),
SAKEI_FUNC_NAME_STRINGS("GetRecordCount"),
sakeiGetRecordCountValidateInput,
sakeiGetRecordCountFillSoapRequest,
sakeiGetRecordCountProcessSoapResponse
};
return sakeiStartRequest(request, &info);
}