/* Responder Side : Server is Static. */ # include <stdio.h> #include "/opt/sun4/isode-7.0/h/rosap.h" #include "/opt/sun4/isode-7.0/h/tsap.h" #include <setjmp.h> static char *myservice = "mytest"; static char *mycontext ="mytest"; static jmp_buf toplevel; int ros_init(), ros_work(), ros_lose(),ros_initialization(); struct TSAPdisconnect tds; struct TSAPdisconnect *td = &tds; main(argc,argv) int argc; char *argv[]; { int status; AEI aei; register struct dispatch *ds; struct TSAPdisconnect tds; struct TSAPdisconnect *td=&tds; struct RoSAPindication rois; register struct RoSAPindication *roi=&rois; register struct RoSAPpreject *rop=&roi->roi_preject; if((aei=str2aei(PLocalHostName(),myservice)) == NULLAEI) printf("unknown appln entity: %s %s", PLocalHostName(), myservice); if(isodeserver(argc,argv,aei,ros_init,ros_work,ros_lose,td) == NOTOK) { if(td -> td_cc >0) printf("isodeserver: [%s] %*.*s\n",TErrString(td -> td_reason), td -> td_cc,td -> td_cc,td -> td_data); else printf("isodeserver: [%s]\n", TErrString(td->td_reason)); } exit(0); } static int ros_init(vecp,vec) int vecp; char **vec; { int sd; struct AcSAPstart acss; register struct AcSAPstart *acs = &acss; struct AcSAPindication acis; register struct AcSAPindication *aci = &acis; register struct AcSAPabort *aca = &aci -> aci_abort; register struct PSAPstart *ps = &acs -> acs_start; struct RoSAPindication rois; register struct RoSAPindication *roi = &rois; register struct RoSAPpreject *rop = &roi -> roi_preject; if(AcInit(vecp,vec,acs,aci) == NOTOK) { printf("init fails: %s",AcErrString(aca -> aca_reason)); return(NOTOK); } sd = acs -> acs_sd; ACSFREE(acs); if(AcAssocResponse(sd,ACS_ACCEPT,ACS_USER_NULL,NULLOID, NULLAEI,&ps -> ps_called, NULLPC, ps -> ps_defctxresult, ps -> ps_prequirements, ps -> ps_srequirements, SERIAL_NONE, ps -> ps_settings, &ps -> ps_connect, NULLPEP,0,aci) == NOTOK) { printf("A-ASSOCIATE.response %s",AcErrString(aca -> aca_reason)); return(NOTOK); } printf("Association Successful\n"); if(RoSetService(sd,RoPService,roi) == NOTOK) printf("RoSetService %s",RoErrString(rop -> rop_reason)); return(sd); } static int ros_work(fd) int fd; { int result; struct AcSAPindication acis; struct RoSAPindication rois; register struct RoSAPindication *roi = &rois; register struct RoSAPpreject *rop = &roi -> roi_preject; printf("Entered the function that is an event handler\n"); switch(setjmp(toplevel)) { case OK : printf("okay condition\n"); break; default: (void) AcUAbortRequest(fd,NULLPEP,0,&acis); printf("negative ros_work\n"); return NOTOK; } switch(result = RoWaitRequest(fd,OK,roi)) { case NOTOK: if(rop -> rop_reason == ROS_TIMER) break; case OK: case DONE: break; default: printf(NULLCP,"unknown return from RoWaitReq = %d",result); } return OK; } static int ros_lose(td) struct TSAPdisconnect *td; { printf("entered ros_lose\n"); if((td ->td_cc) > 0) printf("TNetAccept: [%s] %*.*s",TErrString(td -> td_reason), td -> td_cc, td -> td_cc, td -> td_data); else printf("TNetAccept: [%s]",TErrString(td -> td_reason)); exit(0); }