Sample code for NCS_FindVirtualServer()
#ifdef __MWERKS__
#pragma ANSI_strict off
#pragma warn_padding off
#endif
#include <ncssdk.h>
#ifdef __MWERKS__
#pragma warn_padding reset
#pragma ANSI_strict reset
#endif
#include <nunicode.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SCRIPT_LEN 2048
#define CASE_RET(id) case id: return #id;
static char const* strNCSError( NCS_RETURN error_code) {
switch ( error_code) {
CASE_RET( NCS_SUCCESS)
CASE_RET( NCS_ERROR_INVALID_HANDLE)
CASE_RET( NCS_ERROR_INVALID_PARAMETER)
CASE_RET( NCS_FAILURE)
CASE_RET( NCS_BUSY)
CASE_RET( NCS_ERROR_TOO_MANY_HANDLES)
CASE_RET( NCS_UNKNOWN)
CASE_RET( NCS_BAD_PARAMETER)
CASE_RET( NCS_ALLOC_ERROR)
CASE_RET( NCS_NODE_NOT_FOUND)
CASE_RET( NCS_IP_DUPLICATE)
CASE_RET( NCS_RESOURCE_ONLINE)
CASE_RET( NCS_RESOURCE_NOT_FOUND)
CASE_RET( NCS_RESOURCE_FOUND)
CASE_RET( NCS_ATTACH_CREATE)
CASE_RET( NCS_ATTACH_EXISTS)
CASE_RET( NCS_NOT_CLUSTER_MEMBER)
CASE_RET( NCS_NO_RESOURCES)
CASE_RET( NCS_TRYLOCK_HELD)
CASE_RET( NCS_JOIN_LEAVE_PENDING)
CASE_RET( NCS_JOIN_LEAVE_ALREADY_IN)
CASE_RET( NCS_JOIN_LEAVE_NOT_IN)
CASE_RET( NCS_JOIN_LEAVE_NO_GIPC)
CASE_RET( NCS_JOIN_LEAVE_GIPC_ERROR)
CASE_RET( NCS_JOIN_LEAVE_SBD_ERROR)
CASE_RET( NCS_JOIN_LEAVE_TIMED_OUT)
CASE_RET( NCS_JOIN_LEAVE_EVENT_EXIT)
CASE_RET( NCS_NOT_SUPPORTED)
}
return "Unknown NCS code";
}
static void printUniCodeStr( UINT16* str) {
if ( str == NULL) {
printf( "<null>");
}
else {
unsigned char buffer[ 256];
size_t actual_len = 0;
int ccode;
ccode = NWUSUnicodeToByte( buffer, sizeof( buffer), /* ( unicode*) */ str, &actual_len);
if ( ccode != 0) {
printf( "NWUSUnicodeToByte failed, ccode = %x, actual_len = %u\n", ccode, actual_len);
}
else printf(( char*) buffer);
}
}
int main( int argc, char* argv[]) {
NCS_HANDLE handle;
NCS_POOL_INFO pool;
NCS_RETURN ccode;
if ( argc != 2) {
printf( "Usage: %s <volume name>\n", argv[ 0]);
return EXIT_FAILURE;
}
NWUSStandardUnicodeInit();
ccode = NCS_Register( NULL, NULL, NULL, NULL, NULL, &handle);
if ( ccode != NCS_SUCCESS) {
printf( "NCS_Register failed, ccode = %d (%s)\n", ccode, strNCSError( ccode));
return EXIT_FAILURE;
}
memset( &pool, 0, sizeof( pool));
ccode = NCS_FindVirtualServer( handle, ( UINT8*) argv[ 1], &pool);
/* if ( ccode != NCS_RESOURCE_FOUND && ccode != NCS_RESOURCE_NOT_FOUND) { */
if ( ccode != NCS_SUCCESS) {
printf( "NCS_FindVirtualServer failed, ccode = %d (%s)\n", ccode, strNCSError( ccode));
NCS_Deregister( handle);
return EXIT_FAILURE;
}
printf( "ResFDN = ");
printUniCodeStr( pool.ResFDN);
puts( "");
printf( "PoolFDN = ");
printUniCodeStr( pool.PoolFDN);
puts( "");
printf( "VirtServFDN = ");
printUniCodeStr( pool.VirtServFDN);
puts( "");
printf( "ResName = %s\n", pool.ResName);
printf( "PoolName = %s\n", pool.PoolName);
printf( "numVols = %d\n", pool.numVols);
printf( "WhichNode = %d\n", pool.WhichNode);
printf( "ResourceIP = %d.%d.%d.%d\n", ((BYTE*)&pool.ResourceIP)[ 0], ((BYTE*)&pool.ResourceIP)[ 1], ((BYTE*)&pool.ResourceIP)[ 2], ((BYTE*)&pool.ResourceIP)[ 3]);
printf( "otherHooks = %p\n", pool.otherHooks);
printf( "volArray = %p\n", pool.volArray);
ccode = NCS_Deregister( handle);
if ( ccode != NCS_SUCCESS) {
printf( "NCS_Deregister failed, ccode = %d (%s)\n", ccode, strNCSError( ccode));
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
© 2008 Novell, Inc. All Rights Reserved.