|
Code Sample |
| Example : C program working with XML Data |
/********************************************************************************** */ /* PURPOSE : Code Sample */ /* */ /* This program will create a PNR */ /* 1) Create a conversation factory */ /* 2) Create a conversation from the factory */ /* 3) List all the transactions available for this release of Proxy */ /* 4) Create a Passenger Name : MOZART/Wolfgang */ /* 5) Create a Ticketing Arrangement Element : TK=OK */ /* 6) Create a Received From Element : AMADEUS DEVELOPMENT */ /* 7) Do an AIR Availability : From Nice to New York on 10May04 */ /* 8) Sell ONE Seat using a cryptic entry */ /* 9) Create a Contact Element : AP B 444-555-1212 and H 555-444-1212 */ /* 10) Save the PNR */ /* 11) Send a Query that returns a MessageOnly_Reply error message */ /* 12) Close the conversation */ /********************************************************************************** */
#include <stdlib.h> #include <stdio.h> #include <string.h> #ifdef _WIN32 #include <Windows.h> #endif #include "CAI_Conversation.h" #include "CAI_XML.h" #ifdef INCLUDE_PLUGIN_HEADERS #include "CAT_plugIn.h" #endif
/****************************************************************/
/* This routine checks if the message was processed correctly */
/* If yes ==> display message "Successfull" */
/* If no ==> display an error message */
/****************************************************************/
void checkErr(CaiErr err, char *function,
CAI_Conversation **conversation,
CAI_ConversationFactory **factory,
CAI_XML_BUFFER reply)
{
char *strStart, *strEnd;
char msgZone[100];
CAI_Dump API_Dump;
if (err == 0)
printf("""%s"" was successfull\n", function);
else if (err == CAI_FUNCTIONAL_ERROR)
{ /* Display the error message returned by the host */
memset(msgZone, '\0', sizeof(msgZone));
strStart = strstr(reply, "<Text>");
strEnd = strstr(reply, "</Text>");
strncpy(msgZone, &strStart[6], strEnd-strStart-6);
printf("Functional error detected by the host while doing a ""%s""\n", function);
printf("Error message returned was: %s\n", msgZone);
}
else
{
printf("Error while doing a ""%s""\n", function);
printf("Return Code = %i - %s\n", err, CAI_getErrorStr(err));
if (conversation != NULL)
{
err = CAI_getConversationDump(*conversation, &API_Dump);
if (err == CAI_OK)
printf("Conversation Dump:\n%s",API_Dump.dump);
if (factory != NULL)
CAI_closeConversationFromFactory(*factory, conversation);
else
CAI_closeConversation(conversation);
}
if (factory != NULL)
CAI_releaseConversationFactory(factory);
printf("Press enter to exit\n");
getchar();
exit(0);
}
}
/********************/
/* Main program */
/* Creates the PNR */
/********************/
int main(int argc, char* argv[])
{
CaiErr cai_err = CAI_OK;
CAI_Conversation *conversation = NULL;
CAI_Dump API_Dump;
CAI_CustomSign customsign;
CAI_Connection_SI connection;
CAI_Authentication authentication;
CAI_OpenType open_type;
CAI_ConversationFactory *factory = NULL;
CAI_XML_BUFFER reply;
CAI_Version version;
CAI_ConversationInfo conversation_info;
CAI_Conversation *passivConv = NULL;
CAI_MSG_LIST msg_list;
unsigned int listCount = 0;
unsigned int i;
#ifdef INCLUDE_PLUGIN_HEADERS
displayPlugInInfo();
#endif
printf("*****************************************************\n");
printf("* Creating the conversation Factory ... *\n");
printf("*****************************************************\n");
CAI_initCustomSign(&customsign);
CAI_initConnection_SI(&connection);
CAI_initAuthentication(&authentication);
CAI_initOpenType(&open_type);
cai_err = CAI_getConnectionInfoFromINI(iniFile, &connection);
checkErr(cai_err, "getConnectionFromINI", NULL, NULL, NULL);
authentication.corporate_id = (unsigned char *) "Corpo";
authentication.user_id = (unsigned char *) "User";
authentication.password = (unsigned char *) "Secret";
open_type.bind_host_resource = 0; /* Fast Open */
open_type.custom_sign = &customsign;
cai_err = CAI_createConversationFactory_SI(&connection, &authentication, &factory);
checkErr(cai_err, "createConversationFactory", NULL, &factory, NULL);
printf("*****************************************************\n");
printf("* Opening a conversation from the Factory ... *\n");
printf("*****************************************************\n");
cai_err = CAI_openConversationFromFactory(factory, &open_type, &conversation);
checkErr(cai_err, "openConversationFromFactory", &conversation, &factory, NULL);
printf("*****************************************************\n");
printf("* List all transactions supported *\n");
printf("*****************************************************\n");
CAI_initMsgList(&msg_list);
CAI_listTransaction(&listCount, &msg_list);
if (listCount > 0)
{
for (i=0; i < listCount; i++)
printf("%s\n", msg_list[i]);
printf("\n");
}
CAI_releaseMsgList(&msg_list);
printf("*****************************************************\n");
printf("* Create a PNR: Name, booking, receive from, ... *\n");
printf("*****************************************************\n");
printf("Create a PNR ...\n");
CAI_initXmlBuffer(&reply);
printf("Send PNR_CreateName_Query\n");
cai_err = CAI_sendAndReceiveXml(conversation,
&reply);
checkErr(cai_err, "sendXML: <PoweredPNR_AddMultiElements>: Add name", &conversation, &factory, reply);
CAI_releaseXmlBuffer(&reply);
cai_err = CAI_sendAndReceiveXml(conversation,
&reply);
checkErr(cai_err, "sendXML: <PoweredPNR_AddMultiElements>: Add TKT Element", &conversation, &factory, reply);
CAI_releaseXmlBuffer(&reply);
cai_err = CAI_sendAndReceiveXml(conversation,
&reply);
checkErr(cai_err, "sendXML: <PoweredPNR_AddMultiElements>: Add Receive From", &conversation, &factory, reply);
CAI_releaseXmlBuffer(&reply);
/* ================================================================= */
/* Air Availability : NCE NYC 10May04 */
/* ================================================================= */
cai_err = CAI_sendAndReceiveXml(conversation,
&reply);
checkErr(cai_err, "sendXML: <PoweredAir_MultiAvailability>", &conversation, &factory, reply);
CAI_releaseXmlBuffer(&reply);
/* ================================================================= */
/* Cryptic Air Sell From Availability */
/* ================================================================= */
cai_err = CAI_sendAndReceiveXml(conversation,
&reply);
checkErr(cai_err, "sendXML: <Cryptic_GetScreen_Query>", &conversation, &factory, reply);
CAI_releaseXmlBuffer(&reply);
/* ================================================================= */
/* PNR_CreateContact : Create the Contact Element */
/* ================================================================= */
cai_err = CAI_sendAndReceiveXml(conversation,
&reply);
checkErr(cai_err, "sendXML: <PoweredPNR_AddMultiElements>: Add Contact information", &conversation, &factory, reply);
CAI_releaseXmlBuffer(&reply);
/* ================================================================= */
/* PNR_Save : Save the PNR */
/* ================================================================= */
cai_err = CAI_sendAndReceiveXml(conversation,
&reply);
checkErr(cai_err, "sendXML: <PoweredPNR_AddMultiElements>: End Transaction", &conversation, &factory, reply);
CAI_releaseXmlBuffer(&reply);
printf("*****************************************************\n");
printf("* Erroneous msg-PoweredDoc for non-existing language*\n");
printf("*****************************************************\n");
cai_err = CAI_sendAndReceiveXml(conversation,
&reply);
checkErr(cai_err, "sendXML: <PoweredDoc_DisplayItinerary>", &conversation, &factory, reply);
CAI_releaseXmlBuffer(&reply);
printf("*****************************************************\n");
printf("* Closing the conversation from the Factory ... *\n");
printf("*****************************************************\n");
cai_err = CAI_closeConversationFromFactory(factory, &conversation);
checkErr(cai_err, "closeConversationFromFactory", &conversation, &factory, NULL);
CAI_releaseConversationFactory(&factory);
printf("***********************\n");
printf("* End of test Factory *\n");
printf("***********************\n");
exit(0);
}