ISODE: A Simple Server



next up previous
Next: About this document Up: An ISODE example Previous: ISODE: A simple

ISODE: A Simple Server

 

        /* 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);    
}



boots cassel
Wed Feb 7 10:22:57 EST 1996