4.4.3.4 tryOnFml.c Server Code

The following listing illustrates the server side code for using the FML buffer type. The PASSFML service reads in an input FML buffer and outputs a FML buffer.

Listing tryOnFml.c Code Example

/*
* tryOnFml.c
*
* Copyright (c) 1997 Oracle Systems, Inc. All rights reserved
*
* Contains the PASSFML Oracle Tuxedo server.
*
*/
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/stat.h>
#include <malloc.h>
#include <math.h>
#include <string.h>
#include <fml.h>
#include <fml32.h>
#include <Usysflds.h>
#include <atmi.h>
#include <userlog.h>
#include "tryOnFml.f16.h"
/*
 * PASSFML service reads in a input fml buffer and outputs a fml buffer.
 */
void
PASSFML( TPSVCINFO *rqst )
{
       FLDLEN len;
       FBFR   *svcinfo = (FBFR *) rqst->data;
       char   inputString[256];
       long   inputInt;
       float  inputFloat;      
       FBFR   *fml_ptr;
       int    rt;
       if (Fget(svcinfo, INPUTSTRING, 0, inputString, &len) < 0) {
              (void)userlog("Fget of INPUTSTRING failed %s",
                     Fstrerror(Ferror));
              tpreturn(TPFAIL, 0, rqst->data, 0L, 0);
}
       if (Fget(svcinfo, INPUTINT, 0, (char *) &inputInt, &len) < 0) {
            (void)userlog("Fget of INPUTINT failed %s",Fstrerror(Ferror));
          tpreturn(TPFAIL, 0, rqst->data, 0L, 0);
}
      if (Fget(svcinfo, INPUTFLOAT, 0, (char *) &inputFloat, &len) < 0) {
       (void)userlog("Fget of INPUTFLOAT failed %s",        
                Fstrerror(Ferror));
       tpreturn(TPFAIL, 0, rqst->data, 0L, 0);
}
      /* We could just pass the FML buffer back as is, put lets*/
      /* store it into another FML buffer and pass it back.*/
      if ((fml_ptr = (FBFR *)tpalloc("FML",NULL,rqst->len))==(FBFR *)NULL) {  
        (void)userlog("tpalloc failed in PASSFML %s",
                 tpstrerror(tperrno));
        tpreturn(TPFAIL, 0, rqst->data, 0L, 0);
}
      if(Fadd(fml_ptr, OUTPUTSTRING, inputString, (FLDLEN)0) == -1) {
             userlog("Fadd failed with error: %s", Fstrerror(Ferror));
                 tpfree((char *)fml_ptr);
                 tpreturn(TPFAIL, 0, NULL, 0L, 0);
}
      if(Fadd(fml_ptr, OUTPUTINT, (char *)&inputInt, (FLDLEN)0) == -1) {
            userlog("Fadd failed with error: %s", Fstrerror(Ferror));
                 tpfree((char *)fml_ptr);
                 tpreturn(TPFAIL, 0, NULL, 0L, 0);
}
      if(Fadd(fml_ptr, OUTPUTFLOAT, (char *)&inputFloat, (FLDLEN)0) == -1) {
            userlog("Fadd failed with error: %d\n", Fstrerror(Ferror));
                 tpfree((char *)fml_ptr);
                 tpreturn(TPFAIL, 0, NULL, 0L, 0);
}
                 tpreturn(TPSUCCESS, 0, (char *)fml_ptr, 0L, 0);
}