Example Application

The sample code shown below illustrates how to use the ASCII version C API.

// Declarations 
Server *server = NULL; 
Message *request = NULL; 
DataTable *dataTable = NULL; 
Message *reply = NULL; 
Service *service = NULL; 
int nRet; 
DataRow *row1 = NULL; 
DataRow *row2 = NULL; 
DataTable *returnDataTable= NULL; 
char** columnNames; 
DataRow** rows; 
DataRow*dataRow; 
int i; 
int j; 
char* value; 

//Create Server 
server = createServer(); 
 
//Set server connection properties 
nRet = setConnectionProperty(server, SERVER_HOST, "localhost"); 
nRet = setConnectionProperty(server, SERVER_PORT, "10119 "); 
nRet = setConnectionProperty(server, SERVER_CONNECTION_TYPE,"SOCKET"); 
nRet = setConnectionProperty(server, SERVER_ACCOUNT_ID,"guest"); 
nRet = setConnectionProperty(server, SERVER_ACCOUNT_PASSWORD,""); 

//Connect to server 
nRet = serverConnect(server); 
if(nRet != SUCCESSFUL_RETURN) 
{ 
printf( getErrorMessage(nRet)); 
// free memory 
if(server) 
nRet = deleteServer(server); 
return ; 
} 

 //Get Service From Server 
 service = getServiceFromServer(server,"ValidateAddress" ); 

//Create Input Message 
request = createMessage(); 

//Fill DataTable in the input message 
dataTable = getDataTable(request); 
nRet= addColumn( dataTable, "AddressLine1", &nRet); 
nRet= addColumn( dataTable, "City", &nRet); 
nRet= addColumn( dataTable, "StateProvince", &nRet); 
 
row1 = newRow( dataTable ); 
setByIndex (row1, 0 , "4200 Parliament Place"); 
setByIndex (row1, 1 ,"Lanham"); 
setByIndex (row1, 2 , "Maryland"); 

addRow( dataTable, row1); 

row2 = newRow( dataTable ); 
setByIndex (row2, 0 , "10535 Boyer Blvd"); 
setByIndex (row2, 1 ,"Austin"); 
setByIndex (row2, 2 , "Texas"); 

addRow( dataTable, row2); 

//Set"option" Properties to the Input Message 
nRet = putOption(request, "OutputCasing","M"); 
nRet = putOption(request, "OutputRecordType","A"); 
 
//Process Input Message, return output Message 
nRet = processMessage(service, request, &reply); 
if(nRet != SUCCESSFUL_RETURN) 
{ 
printf("Error Occurred, " ); 
printf(getErrorMessage(nRet)); 

// free memory 
if(request) 
nRet = deleteMessage(request); 
if(reply)	
nRet = deleteMessage(reply); 
if(server) 
nRet = deleteServer(server); 

return ; 

} 
 
//Disconnect from server 
nRet = serverDisconnect(server); 

//Get the result from the response message 
returnDataTable = getDataTable(reply ); 
columnNames = getColumnNames(returnDataTable); 

rows = getDataRows( returnDataTable); 

for( i=0; i < getRowCount( returnDataTable); i++) 
{ 
dataRow = rows[i]; 

for(j=0; j < getColumnCount(returnDataTable); j++) 
{ 
value = (char*)getByIndex( dataRow, j); 
printf(value); 
printf("\n"); 
} 
} 
 
//Free Memory 
if(request) 
nRet = deleteMessage(request); 
if(reply) 
nRet = deleteMessage(reply); 
if(server) 
nRet = deleteServer(server); 
}

The sample code shown below illustrates how to use the Unicode version C API. The string here is represented by UChar*(or unsigned short*), which is 16-bit type to represent the Unicode string .ICU provides a function called u_charsToUChars, which converts 8-bit string to 16-bit string. The example here shows how to call Unicode version C API. The input string are all ASCII, so that we use u_charsToUChars to convert to 16-bit string. You could also construct Unicode string to directly pass in C API.

UChar* convertcharToUChar(	char* name, UChar* value) 
		{ 
		 int lenName= strlen(name);  
		 u_charsToUChars(name,	value, lenName ); 
		 value[ lenName]=0; 
		 return value; 
		} 

		 // Declarations 
		 Server *server = NULL; 
		 Message *request = NULL; 
		 DataTable *dataTable = NULL; 
		 DataTable *returnDataTable= NULL; 
		 Message *reply = NULL; 
		 Service *service = NULL; 
		 int nRet; 
		 DataRow* newDataRow; 
		 UChar			 name[128]; 
		 UChar value[128]; 
		 UChar** columnNames; 
		 DataRow** rows; 
		 DataRow* dataRow; 
		 int i, j; 
		 UChar* columnValue; 
		 UChar*			errorMsg; 
		
		 //Create Server 
		 server = createServer(); 
		
		 //Set server connection properties 
		 setConnectionProperty(server, convertcharToUChar( SERVER_HOST,	name) , convertcharToUChar( "localhost",	value)); 
		 setConnectionProperty(server, convertcharToUChar( SERVER_PORT,	name) , convertcharToUChar( "10119",	value)); 
		 setConnectionProperty(server, convertcharToUChar( SERVER_CONNECTION_TYPE,	name) , convertcharToUChar( "SOCKET",	value)); 
		 setConnectionProperty(server, convertcharToUChar( SERVER_ACCOUNT_ID,	name) , convertcharToUChar( "guest",	value)); 
		 setConnectionProperty(server, convertcharToUChar( SERVER_ACCOUNT_PASSWORD,	name) , convertcharToUChar( "",	value)); 
		 
		
		 //Connect to server 
		 nRet = serverConnect(server); 
		 if(nRet != SUCCESSFUL_RETURN) 
		 { 
		 // error handling 
		 errorMsg = getErrorMessage(nRet); 
		 // free memory 
		 if(server) 
			nRet = deleteServer(server); 
		 return ; 
		 } 
		
		 //Get Service From Server 
		 service = getServiceFromServer(server,convertcharToUChar( "ValidateAddress",	name)); 
		
		 //Create Input Message 
		 request = createMessage(); 
		
		 //Fill DataTable in the input message 
		 dataTable = getDataTable(request); 
		 addColumn(	dataTable,convertcharToUChar( "AddressLine1",	name),	 &nRet); 
		 addColumn(	dataTable,convertcharToUChar( "City",	name),	 &nRet); 
		 addColumn(	dataTable,convertcharToUChar( "PostalCode",	name),	 &nRet); 
		 addColumn(	dataTable,convertcharToUChar( "StateProvince",	name),	 &nRet); 
		
		 newDataRow =	newRow( dataTable ); 
		
		 setByIndex (newDataRow, 0 ,	convertcharToUChar( "74, Rue Octave Bénard",	name) ); 
		 setByIndex (newDataRow, 1 ,	convertcharToUChar( "Etang-Salé-les- Bains",	name) ); 
		 setByIndex (newDataRow, 2 ,	convertcharToUChar( "97427",	name) ); 
		 setByIndex (newDataRow, 3 ,	convertcharToUChar( "Reunion Island",	name) ); 
		 
		 addRow( dataTable, newDataRow); 
		
		 //Set"option" Properties to the Input Message 
		 nRet = putOption(request, convertcharToUChar( "OutputCasing",	name), convertcharToUChar( "M",	value)); 
		 nRet = putOption(request, convertcharToUChar( "OutputRecordType",	name), convertcharToUChar( "A",	value)); 
		 
		
		 //Process Input Message, return output Message 
		 nRet = processMessage(service, request, &reply); 
				if(nRet != SUCCESSFUL_RETURN) 
		 { 
		 // error handling 
		 errorMsg = getErrorMessage(nRet); 
		 // free memory 
		 if(request) 
		 nRet = deleteMessage(request); 
		 if(reply)	
		 nRet = deleteMessage(reply); 
		 if(server) 
			nRet = deleteServer(server); 
			
		 return ; 
		 } 
		
		 //Disconnect from server 
		 nRet = serverDisconnect(server); 
		
		 //Get the result from the response message 
		 returnDataTable = getDataTable(reply ); 
		 columnNames = getColumnNames(returnDataTable); 
		 rows = getDataRows( dataTable);
		 for(	i=0; i < getRowCount( dataTable); i++) 
		 { 
		 dataRow =	 rows[i]; 	
		 for(j=0; j < getColumnCount(dataTable); j++) 
		 { 
		 columnValue = (UChar*)getByIndex( dataRow, j); 
		 } 
		 } 
		 
		 //Free Memory 
		 if(request) 
		 nRet = deleteMessage(request); 
		 if(reply)	
		 nRet = deleteMessage(reply); 
		 if(server) 
			nRet = deleteServer(server);