Example 20-1 shows how to create a binding.
#include <stdio.h> #include <xfn/xfn.h> #include <string.h> /* This routine creates a binding with a name provided by "name" and having a reference type "reference_type" and address type "address_type". An example of using the function could be: fns_create_bindings( "user/jsmith/service/calendar", "onc_calendar", "onc_cal_str", "jsmith&calserver"); */ int fns_create_bindings( char *name, char *reference_type, char *address_type, char *data) { int return_status; FN_composite_name_t *binding_name; FN_identifier_t ref_id, addr_id; FN_status_t *status; FN_ref_t *reference; FN_ref_addr_t *address; FN_ctx_t *initial_context; /* Obtain the initial context */ status = fn_status_create(); initial_context = fn_ctx_handle_from_initial(0, status); /* Check status for any error messages */ if ((return_status = fn_status_code(status)) != FN_SUCCESS) { fprintf(stderr, "Unable to obtain the initial context\n"); return (return_status); } /* Get the composite name for the printer name */ binding_name = fn_composite_name_from_str((unsigned char *) name); /* Construct the Address */ addr_id.format = FN_ID_STRING; addr_id.length = strlen(address_type); addr_id.contents = (void *) address_type; address = fn_ref_addr_create(&addr_id, strlen(data), (const void *) data); /* Construct the Reference */ ref_id.format = FN_ID_STRING; ref_id.length = strlen(reference_type); ref_id.contents = (void *) reference_type; reference = fn_ref_create(&ref_id); /* Add Address to the Reference */ fn_ref_append_addr(reference, address); /* Create a binding */ fn_ctx_bind(initial_context, binding_name, reference, 0, status); /* Check the error status and return */ return_status = fn_status_code(status); fn_composite_name_destroy(binding_name); fn_ref_addr_destroy(address); fn_ref_destroy(reference); fn_ctx_destroy(initial_context); return (return_status); } |