home *** CD-ROM | disk | FTP | other *** search
/ Network Support Encyclopedia 96-1 / novell-nsepro-1996-1-cd2.iso / download / netware / an401x.exe / DOITACCT.C < prev    next >
C/C++ Source or Header  |  1993-12-02  |  5KB  |  182 lines

  1. #include "..\doitacct.h"
  2. #include <string.h>
  3. #include <limits.h>
  4. #include <stdio.h>
  5.  
  6. NWCCODE NWAPI DoItSubmitAccountNote(
  7.   NWCONN_HANDLE conn,
  8.   WORD objectType,
  9.   char NWPTR objectName,
  10.   long amount,
  11.   char *noteString)
  12. {
  13.     FILE                *logFile;
  14.     AUDIT_RECORD    note;
  15.     NWOBJ_ID            oID;
  16.     NWCCODE            cCode;
  17.     int                length;
  18.     int                written;
  19.     NWCONN_NUM        connNumber;
  20.     char            oName[48];
  21.     NWOBJ_TYPE        oType;
  22.  
  23.     logFile = fopen("SYS:\\SYSTEM\\DOIT.LOG", "a+b");
  24.     if (logFile != NULL) {
  25.         note.recordType = 2;
  26.         cCode = NWGetFileServerDateAndTime(conn, note.dateAndTime);
  27.  
  28.         /* get your connection number */
  29.         cCode = NWGetConnectionNumber(conn, &connNumber);
  30.         if (cCode != SUCCESSFUL) {
  31.             fclose(logFile);
  32.             return(cCode);
  33.         }
  34.  
  35.         /* get initiator object ID */
  36.         cCode = NWGetConnectionInformation(conn, connNumber, oName, &oType, &oID, NULL);
  37.         if (cCode != SUCCESSFUL) {
  38.             fclose(logFile);
  39.             return(cCode);
  40.         }
  41.  
  42.         note.chargerID = oID;
  43.         note.charge = amount;
  44.  
  45.         /* get object ID of who the note is about */
  46.         cCode = NWGetObjectID(conn, objectName, objectType, &oID);
  47.         note.chargeeID = oID;
  48.  
  49.         /* write the note */
  50.         written = fwrite(¬e, sizeof(AUDIT_RECORD), 1, logFile);
  51.  
  52.         /* write the length of the comment that goes with the note */
  53.         length = strlen(noteString);
  54.         written = fwrite(&length, sizeof(length), 1, logFile);
  55.  
  56.         /* then write the comment */
  57.         written = fputs(noteString, logFile);
  58.  
  59.         fclose(logFile);
  60.         if (written != EOF)
  61.             return(SUCCESSFUL);
  62.         else
  63.             return(ERR_INSUFFICIENT_SPACE);
  64.     } else
  65.         return(INVALID_PATH);
  66. }
  67.  
  68. NWCCODE NWAPI DoItQueryAccountingInstalled(
  69.   NWCONN_HANDLE conn,
  70.   BYTE NWPTR installed)
  71. {
  72.     NWCCODE    cCode;
  73.     char    serverName[48];
  74.     DWORD    sequence = -1L;
  75.  
  76.     cCode = NWGetFileServerName(conn, serverName);
  77.     if (cCode != SUCCESSFUL) {
  78.         *installed = (BYTE)0;
  79.         return(cCode);
  80.     }
  81.  
  82.     /* check for DOIT_ACCT_SERV property of server object */
  83.     cCode = NWScanProperty(conn, serverName, OT_FILE_SERVER, "DOIT_ACCT_SERV", &sequence, NULL, NULL, NULL, NULL, NULL);
  84.     if (cCode != SUCCESSFUL)
  85.         *installed = (BYTE)0;
  86.     else
  87.         *installed = (BYTE)1;
  88.  
  89.     return(cCode);
  90. }
  91.  
  92. NWCCODE NWAPI DoItGetAccountStatus(
  93.   NWCONN_HANDLE conn,
  94.   NWOBJ_TYPE objectType,
  95.   char NWPTR objectName,
  96.   long NWPTR balance,
  97.   long NWPTR limit)
  98. {
  99.     NWCCODE    cCode;
  100.     BYTE data[128];
  101.     NWFLAGS    more;
  102.  
  103.     cCode = NWReadPropertyValue(conn, objectName, objectType, "DOIT_ACCT_BAL", 1, data, &more, NULL);
  104.     if (cCode != SUCCESSFUL)
  105.         return(cCode);
  106.  
  107.     *balance = data[0];
  108.     *limit = data[4];
  109.     return(SUCCESSFUL);
  110. }
  111.  
  112. NWCCODE NWAPI DoItSubmitAccountCharge(
  113.   NWCONN_HANDLE conn,
  114.   WORD objectType,
  115.   char NWPTR objectName,
  116.   long chargeAmount)
  117. {
  118.     NWCCODE        cCode;
  119.     char        serverName[48];
  120.     BYTE         data[128];
  121.     NWFLAGS        more;
  122.     long         balance;
  123.     NWCONN_NUM    connNumber;
  124.     char        oName[48];
  125.     NWOBJ_TYPE    oType;
  126.     NWOBJ_ID    oID;
  127.     FILE        *logFile;
  128.     AUDIT_RECORD    chargeRecord;
  129.  
  130.     /* get submitter's connection number */
  131.     cCode = NWGetConnectionNumber(conn, &connNumber);
  132.     if (cCode != SUCCESSFUL)
  133.         return(cCode);
  134.  
  135.     /* get submitter's object ID */
  136.     cCode = NWGetConnectionInformation(conn, connNumber, oName, &oType, &oID, NULL);
  137.     if (cCode != SUCCESSFUL)
  138.         return(cCode);
  139.  
  140.     /* get server name */
  141.     cCode = NWGetFileServerName(conn, serverName);
  142.     if (cCode != SUCCESSFUL)
  143.         return(cCode);
  144.  
  145.     /* check to see if submitter is authorized to make charges */
  146.     cCode = NWIsObjectInSet(conn, serverName, OT_FILE_SERVER, "DOIT_ACCT_SERV", oName, oType);
  147.     if (cCode != SUCCESSFUL)
  148.         return(cCode);
  149.  
  150.     cCode = NWReadPropertyValue(conn, objectName, objectType, "DOIT_ACCT_BAL", 1, data, &more, NULL);
  151.     if (cCode != SUCCESSFUL)
  152.         return(cCode);
  153.  
  154.     /* get balance */
  155.     memcpy((void *)&balance, (void *)data, sizeof(long));
  156.  
  157.     /* check for underflow */
  158.     if (LONG_MIN + chargeAmount > balance)
  159.         balance = LONG_MIN;
  160.     else
  161.         balance = balance - chargeAmount;
  162.  
  163.     /* copy new balance to segment */
  164.     memcpy((void *)data, (void *)&balance, sizeof(long));
  165.  
  166.     /* write note */
  167.     logFile = fopen("SYS:\\SYSTEM\\DOIT.LOG", "a+b");
  168.     if (logFile != NULL) {
  169.         chargeRecord.recordType = 1;
  170.         cCode = NWGetFileServerDateAndTime(conn, chargeRecord.dateAndTime);
  171.         chargeRecord.chargerID = oID;
  172.         chargeRecord.charge = chargeAmount;
  173.         cCode = NWGetObjectID(conn, objectName, objectType, &oID);
  174.         chargeRecord.chargeeID  = oID;
  175.         fwrite(&chargeRecord, sizeof(AUDIT_RECORD), 1, logFile);
  176.         fclose(logFile);
  177.     }
  178.  
  179.     cCode = NWWritePropertyValue(conn, objectName, objectType, "DOIT_ACCT_BAL", 1, data, 0);
  180.     return(cCode);
  181. }
  182.