Personal tools
You are here: Home dataCom esro esroApi perfsch.c.txt

perfsch.c.txt

/*+ * * File: perfsch.c * * Description: Performer with call back ESROS API (with scheduler) * * Functions: * G_heartBeat(void) * -*/ #include "estd.h" #include "pf.h" #include "eh.h" #include "du.h" #include "getopt.h" #include "tm.h" #include "addr.h" #include "inetaddr.h" #include "sch.h" #include "esro_cb.h" #include "extfuncs.h" #include "target.h" RC_DEBUG_ENABLE; char *__applicationName = "perfsch"; extern Int G_heartBeat(void); PUBLIC DU_Pool *G_duMainPool; typedef struct G_Env { Char *progName; /* Application Specific Information */ } G_Env; PUBLIC TM_ModDesc G_tmDesc; PUBLIC G_Env G_env; ESRO_SapSel locSapSel = 15; ESRO_SapDesc locSapDesc; ESRO_InvokeId invokeId; ESRO_EncodingType encodingType; ESRO_OperationValue operationValue; #define SHELL_CMD_OP 2 ESRO_FunctionalUnit funcUnit = ESRO_3Way; struct ESRO_Event event; Bool reset = 0; #define RESULT 0 #define ERROR 1 Int resErr = RESULT; /*< * Function: G_init * * Description: Initialize. * * Arguments: None. * * Returns: None. * >*/ Void G_init(void) { G_tmDesc = TM_open("G_"); if (!G_tmDesc) { EH_problem("G_init : TM_open G_ failed"); } signal(SIGINT, G_sigIntr); } /*< * Function: G_exit * * Description: Exit. * * Arguments: Exit code. * * Returns: None. * >*/ Void G_exit(Int code) { exit(code); } /*< * Function: G_usage * * Description: Usage. * * Arguments: None. * * Returns: None. * >*/ Void G_usage(void) { String usage1 = ""; String usage2 = ""; printf("%s: Usage: %s\n", G_env.progName, usage1); printf("%s: Usage: %s\n", G_env.progName, usage2); } /*< * Function: G_sigIntr * * Description: Signal processing. * * Arguments: None. * * Returns: None. * >*/ Void G_sigIntr(Int unUsed) { signal(SIGINT, G_sigIntr); G_exit(22); } /*< * Function: G_heartBeat * * Description: Heart Beat for the stack. * * Arguments: None. * * Returns: 0 on successful completion, -1 on unsuccessful completion. * >*/ SuccFail G_heartBeat(void) { if (SCH_block() < 0) { EH_fatal("main: SCH_block returned negative value"); return (FAIL); } SCH_run(); return (SUCCESS); } static void resultReq(String result); static void errorReq(String error); int invokeIndication (ESRO_SapDesc locSapDesc, ESRO_SapSel remESROSap, T_SapSel *remTsap, N_SapAddr *remNsap, ESRO_InvokeId invokeId, ESRO_OperationValue opValue, ESRO_EncodingType encodingType, DU_View parameter) { TM_TRACE((G_tmDesc, TM_ENTER, "Got ESRO-Invoke.Indcation invokeId=%d, operationValue=%d, paramter=%s\n", invokeId, opValue, DU_data(parameter))); /* Here is where you perform what you should do * and then call resultReq or errorReq. */ { time_t idate; idate = time(&idate); if (resErr == RESULT) { resultReq(ctime(&idate)); } else { errorReq(ctime(&idate)); } } return 1; } /*< * Function: resultReq * * Description: Result request. * * Arguments: Result. * * Returns: None. * >*/ static void resultReq(String result) { ESRO_RetVal gotVal; DU_View resultDU; int paramLength; TM_TRACE((G_tmDesc, TM_ENTER, "Issuing ESRO-Result.Request parameter=%s\n", result)); paramLength = strlen(result); resultDU = DU_alloc(G_duMainPool, paramLength); OS_copy(DU_data(resultDU), result, paramLength); if ((gotVal = ESRO_CB_resultReq(invokeId, (ESRO_EncodingType) 2, resultDU)) < 0) { EH_problem("resultReq: Could not Invoke"); } DU_free(resultDU); reset = 1; } /*< * Function: errorReq * * Description: Error request. * * Arguments: Error. * * Returns: None. * >*/ static void errorReq(String error) { ESRO_RetVal gotVal; DU_View errorDU; int paramLength; TM_TRACE((G_tmDesc, TM_ENTER, "Issuing ESRO-Error.Request parameter=%s\n", error)); paramLength = strlen(error); errorDU = DU_alloc(G_duMainPool, paramLength); OS_copy(DU_data(errorDU), error, paramLength); if ((gotVal = ESRO_CB_errorReq(invokeId, (ESRO_EncodingType) 2, 0, errorDU)) < 0) { EH_problem("errorReq: Could not Invoke"); } DU_free(errorDU); reset = 1; } int resultInd (ESRO_InvokeId invokeId, ESRO_EncodingType encodingType, DU_View parameter) { char *duData; duData = DU_data(parameter); printf("-------------------------------------------------------------------\n"); printf("Performer: Got Result Indication: invokeId=%d, paramter=%s\n", invokeId, duData); printf("-------------------------------------------------------------------\n"); return 1; } int errorInd (ESRO_InvokeId invokeId, ESRO_EncodingType encodingType, ESRO_ErrorValue errorValue, DU_View parameter) { char *duData; duData = DU_data(parameter); printf("-------------------------------------------------------------------\n"); printf("Performer: Got Error Indication: invokeId=%d, paramter=%s\n", invokeId, duData); printf("-------------------------------------------------------------------\n"); reset = 1; return 1; } int resultCnf(ESRO_InvokeId invokeId) { TM_TRACE((G_tmDesc, TM_ENTER, "Got ESRO-Result.Confirm invokeid=%d\n", invokeId)); printf("------------------------------------------------------\n"); printf("Performer: Got Result Confirmation. invokeId=%d\n", invokeId); printf("------------------------------------------------------\n"); reset = 1; return 1; } int errorCnf(ESRO_InvokeId invokeId) { TM_TRACE((G_tmDesc, TM_ENTER, "Got ESRO-Error.Confirm invokeid=%d\n", invokeId)); printf("------------------------------------------------------\n"); printf("Performer: Got Error Confirmation. invokeId=%d\n", invokeId); printf("------------------------------------------------------\n"); reset = 1; return 1; } int failureInd(ESRO_InvokeId invokeId, ESRO_FailureValue failureValue) { printf("\nPerformer: Failure Indication: InvokeId = %d \n", invokeId); return 1; } /*< * Function: main() * * Description: main function of performer. * * Arguments: argc, argv. * * Returns: None. * >*/ Int main(int argc, char **argv) { Int c; Bool badUsage; G_env.progName = argv[0]; TM_init(); badUsage = FALSE; while ((c = getopt(argc, argv, "T:l:f:re")) != EOF) { switch (c) { case `T': TM_setUp(optarg); break; case `l': /* Local ESRO Sap Selector */ { Int gotVal; if ( PF_getInt(optarg, &gotVal, 13, 0, 63) ) { EH_problem("main (performer): "); badUsage = TRUE; } else { locSapSel = gotVal; } } break; case `f': /* ESRO functional unit */ { Int gotVal; if ( PF_getInt(optarg, &gotVal, 12, 0, 63) ) { EH_problem("main: "); badUsage = TRUE; } else { funcUnit = gotVal; } } break; case `r': resErr = RESULT; break; case `e': resErr = ERROR; break; case `u': case `?': default: badUsage = TRUE; break; } } if (badUsage) { G_usage(); G_exit(1); } G_init(); G_duMainPool = DU_buildPool(MAXBFSZ, BUFFERS, VIEWS); /* build buf pool */ ESRO_init(); TM_validate(); printf("\nFunctional Unit: %d-Way handshaking\n", funcUnit); ESRO_CB_sapUnbind(locSapSel); if (ESRO_CB_sapBind(&locSapDesc, locSapSel, funcUnit, invokeIndication, resultInd, errorInd, resultCnf, errorCnf, failureInd) < 0) { EH_fatal("perform: Could not activate local ESRO SAP."); } while (!reset) { if (G_heartBeat()) { G_exit(13); } } ESRO_CB_sapUnbind(locSapSel); exit (0); } /* main() */
Document Actions