/******************************************************************* * fm_pymt_pol_chagre_process_result() * This function reads the response from vendor * and assigns a reason ID for the response *******************************************************************/ static void fm_pymt_pol_charge_process_result( pcm_context_t *ctxp, pin_flist_t *i_flistp, int *reason_id, int *domain_idp, pin_errbuf_t *ebufp) { pin_flist_t *info_flistp = NULL; pin_errbuf_t any_field_ebuf; pin_cookie_t cookie = NULL; pin_fld_num_t field = 0; int32 rec_id = 0; pin_charge_result_t *resultp = NULL; if (PIN_ERR_IS_ERR(ebufp)) { return ; } PIN_ERR_CLEAR_ERR(ebufp); PIN_ERR_CLEAR_ERR(&any_field_ebuf); while (PIN_FLIST_ANY_GET_NEXT(i_flistp, &field, &rec_id, &cookie, &any_field_ebuf) != NULL ){ if (field == PIN_FLD_CC_INFO || field == PIN_FLD_DD_INFO) { info_flistp = PIN_FLIST_ELEM_GET(i_flistp, field, 0, 0, ebufp); resultp = (pin_charge_result_t *)PIN_FLIST_FLD_GET(info_flistp, PIN_FLD_RESULT, 0,ebufp); /******************************************* * Set the PIN_FLD_RESULT_ID in the PIN_FLD_RESULTS * array ******************************************/ if (resultp){ /****************************** *Set Default Reason ID to 0 *******************************/ switch (*resultp) { case PIN_CHARGE_RES_PASS: *reason_id = PIN_REASON_ID_APPROVED; *domain_idp = PIN_PYMT_REASON_DOMAIN_ID; break; case PIN_CHARGE_RES_FAIL_NO_ANS: *reason_id = PIN_REASON_ID_FAIL_NO_ANS; *domain_idp = PIN_PYMT_FAILED_REASON_DOMAIN_ID; break; case PIN_CHARGE_RES_FAIL_ADDR_AVS: *reason_id = PIN_REASON_ID_FAIL_ADDR_AVS; *domain_idp = PIN_PYMT_FAILED_REASON_DOMAIN_ID; break; case PIN_CHARGE_RES_FAIL_ADDR_LOC: *reason_id = PIN_REASON_ID_FAIL_ADDR_LOC; *domain_idp = PIN_PYMT_FAILED_REASON_DOMAIN_ID; break; case PIN_CHARGE_RES_FAIL_ADDR_ZIP: *reason_id = PIN_REASON_ID_FAIL_ADDR_ZIP; *domain_idp = PIN_PYMT_FAILED_REASON_DOMAIN_ID; break; case PIN_CHARGE_RES_FAIL_CARD_BAD: *reason_id = PIN_REASON_ID_FAIL_CARD_BAD; *domain_idp = PIN_PYMT_FAILED_REASON_DOMAIN_ID; break; case PIN_CHARGE_RES_FAIL_DECL_SOFT: *reason_id = PIN_REASON_ID_FAIL_DECL_SOFT; *domain_idp = PIN_PYMT_FAILED_REASON_DOMAIN_ID; break; case PIN_CHARGE_RES_SRVC_UNAVAIL: *reason_id = PIN_REASON_ID_FAIL_SRVC_UNAVAIL; *domain_idp = PIN_PYMT_FAILED_REASON_DOMAIN_ID; break; case PIN_CHARGE_RES_FAIL_DECL_HARD: *reason_id = PIN_REASON_ID_FAIL_DECL_HARD; *domain_idp = PIN_PYMT_FAILED_REASON_DOMAIN_ID; break; case PIN_CHARGE_RES_FAIL_NO_MIN: *reason_id = PIN_REASON_ID_FAIL_NO_MIN; *domain_idp = PIN_PYMT_FAILED_REASON_DOMAIN_ID; break; case PIN_CHARGE_RES_INVALID_CMD: *reason_id = PIN_REASON_ID_INVALID_CMD; *domain_idp = PIN_PYMT_FAILED_REASON_DOMAIN_ID; break; case PIN_CHARGE_RES_FAIL_SELECT_ITEMS: *reason_id = PIN_REASON_ID_FAIL_SELECT_ITEMS; *domain_idp = PIN_PYMT_FAILED_REASON_DOMAIN_ID; break; case PIN_CHARGE_RES_CVV_BAD: *reason_id = PIN_REASON_ID_FAIL_CVV_BAD; *domain_idp = PIN_PYMT_FAILED_REASON_DOMAIN_ID; break; case PIN_CHARGE_RES_NO_CREDIT_BALANCE: *reason_id = PIN_REASON_ID_NO_CREDIT_BALANCE; *domain_idp = PIN_PYMT_FAILED_REASON_DOMAIN_ID; break; case PIN_CHARGE_RES_FAIL_LOGICAL_PROBLEM: *reason_id = PIN_REASON_ID_FAIL_LOGICAL_PROBLEM; *domain_idp = PIN_PYMT_FAILED_REASON_DOMAIN_ID; break; case PIN_CHARGE_RES_FAIL_FORMAT_ERROR: *reason_id = PIN_REASON_ID_FAIL_FORMAT_ERROR; *domain_idp = PIN_PYMT_FAILED_REASON_DOMAIN_ID; break; case PIN_CHARGE_RES_FAIL_INVALID_CONTENT: *reason_id = PIN_REASON_ID_FAIL_INVALID_CONTENT; *domain_idp = PIN_PYMT_FAILED_REASON_DOMAIN_ID; break; case PIN_CHARGE_RES_FAIL_TECHNICAL_PROBLEM: *reason_id = PIN_REASON_ID_FAIL_TECHNICAL_PROBLEM; *domain_idp = PIN_PYMT_FAILED_REASON_DOMAIN_ID; break; default: *reason_id = PIN_REASON_ID_DEFAULT; /******************************************* * Setting the default reason domain * since we are setting default reason ID * The following line can be commented if * the domain id has to be retained as * it was passed in the function. ******************************************/ *domain_idp = PIN_PYMT_REASON_DOMAIN_ID; break; } } } } /************************************************* * Check Error buf and Debug it ************************************************/ if (PIN_ERR_IS_ERR(ebufp)) { PIN_ERR_LOG_EBUF(PIN_ERR_LEVEL_DEBUG, "fm_pymt_pol_charge_process_result", ebufp); } return; }
static void fm_get_meta_field( pcm_context_t *ctxp, pin_flist_t *in_flistp, pin_flist_t **out_flistpp, pin_errbuf_t *ebufp) { pin_flist_t *keys_flistp = NULL; pin_flist_t *search_flistp = NULL; pin_flist_t *flistp = NULL; poid_t *s_pdp = NULL; poid_t *bi_pdp = NULL; int64 database = 0; int32 sflags = 256; int32 result = PIN_BOOLEAN_FALSE; void *vp = NULL; pin_decimal_t *zero_decimal = pin_decimal("0.0", ebufp); pin_flist_t *r_flistp = NULL; char *name = NULL; char *class_name = NULL; char *default_value; int32 count = 0; int32 cnt_flds = 0; int32 elemid = 1; pin_errbuf_t any_field_ebuf; pin_cookie_t cookie = NULL; pin_fld_num_t field = 0; int32 rec_id = 0; void *type = NULL; if (PIN_ERR_IS_ERR(ebufp)) { return; } PIN_ERR_CLEAR_ERR(ebufp); PIN_ERR_CLEAR_ERR(&any_field_ebuf); PIN_ERR_LOG_FLIST(PIN_ERR_LEVEL_DEBUG, "fm_get_meta_field input flistp", in_flistp); bi_pdp = (poid_t *) PIN_FLIST_FLD_GET(in_flistp, PIN_FLD_POID,0, ebufp); count = PIN_FLIST_ELEM_COUNT (in_flistp, PIN_FLD_KEYS, ebufp); if (count == 0) { pin_set_err(ebufp, PIN_ERRLOC_FM, PIN_ERRCLASS_SYSTEM_DETERMINATE, PIN_ERR_BAD_OPCODE, 0, 0, count); PIN_ERR_LOG_EBUF(PIN_ERR_LEVEL_ERROR, "op_get_meta_field search flistp", ebufp); *out_flistpp = NULL; return; } else { keys_flistp = PIN_FLIST_ELEM_GET (in_flistp, PIN_FLD_KEYS, PIN_ELEMID_ANY, 0, ebufp); while (PIN_FLIST_ANY_GET_NEXT(keys_flistp, &field, &rec_id, &cookie, &any_field_ebuf) != NULL ){ cnt_flds = cnt_flds + 1; if (field == PIN_FLD_NAME){ name = (char *)PIN_FLIST_FLD_GET(keys_flistp, PIN_FLD_NAME, 1, ebufp); } if (field == PIN_FLD_CLASS_NAME){ class_name = PIN_FLIST_FLD_GET(keys_flistp, PIN_FLD_CLASS_NAME, 0, ebufp ); } if (field == PIN_FLD_TYPE){ type = PIN_FLIST_FLD_GET(keys_flistp, PIN_FLD_TYPE, 0, ebufp ); } } if ( cnt_flds == 1) { vp = (void *)"select X from /metafield where F1 = V1 "; } if ( cnt_flds == 2) { vp = (void *)"select X from /metafield where F1 = V1 and F2 = V2 "; } if ( cnt_flds == 3) { vp = (void *)"select X from /metafield where F1 = V1 and F2 = V2 and F3 = V3 "; } /********************************************************* * Create the search flist to search in the item objects *********************************************************/ search_flistp = PIN_FLIST_CREATE(ebufp); database = PIN_POID_GET_DB(bi_pdp); s_pdp = PIN_POID_CREATE(database, "/search", -1, ebufp); PIN_FLIST_FLD_PUT(search_flistp, PIN_FLD_POID, (void *)s_pdp, ebufp); /****************************************************************** * Set the search template. ******************************************************************/ PIN_FLIST_FLD_SET(search_flistp, PIN_FLD_TEMPLATE, vp, ebufp); PIN_FLIST_FLD_SET(search_flistp, PIN_FLD_FLAGS, (void *)&sflags, ebufp); /********************************************************* * Add the search arguments. *********************************************************/ if (name != NULL) { flistp = PIN_FLIST_ELEM_ADD(search_flistp, PIN_FLD_ARGS, elemid++, ebufp); PIN_FLIST_FLD_SET(flistp, PIN_FLD_NAME, name, ebufp); } /********************************************************* * Add the search arguments. *********************************************************/ if (class_name != NULL) { flistp = PIN_FLIST_ELEM_ADD(search_flistp, PIN_FLD_ARGS, elemid++, ebufp); PIN_FLIST_FLD_SET(flistp, PIN_FLD_CLASS_NAME, class_name, ebufp); } /********************************************************* * Add the search arguments. *********************************************************/ if (type != NULL) { flistp = PIN_FLIST_ELEM_ADD(search_flistp, PIN_FLD_ARGS, elemid++, ebufp); PIN_FLIST_FLD_SET(flistp, PIN_FLD_TYPE, type, ebufp); } /********************************************************* * Add the result array for the search. *********************************************************/ flistp = PIN_FLIST_ELEM_ADD(search_flistp, PIN_FLD_RESULTS, 0, ebufp); PIN_FLIST_FLD_SET(flistp, PIN_FLD_TYPE,(void *)NULL, ebufp); PIN_ERR_LOG_FLIST(PIN_ERR_LEVEL_DEBUG, "op_get_meta_field search flistp", search_flistp); PCM_OP(ctxp, PCM_OP_SEARCH, 0, search_flistp, out_flistpp, ebufp); PIN_ERR_LOG_FLIST(PIN_ERR_LEVEL_DEBUG, "op_get_meta_field search flistp", *out_flistpp); } }