home *** CD-ROM | disk | FTP | other *** search
/ Network Support Encyclopedia 96-1 / novell-nsepro-1996-1-cd2.iso / download / netware / makcl.exe / MAKECALL.C < prev   
C/C++ Source or Header  |  1994-10-24  |  7KB  |  239 lines

  1. /****************************************************************************
  2. **    File:    MAKECALL.C
  3. **
  4. **    Desc:    Sample telephony program
  5. **
  6. **        This NetWare Telephony Services program opens a stream,
  7. **        makes a call, and closes the stream.
  8. **
  9. **        This program is written for Borland C 4.0 for Windows 3.1. It 
  10. **        is compiled as an EASYWIN program, so that I didn't have to 
  11. **        include all the Windows "overhead" code but can just get to 
  12. **        the good stuff.
  13. **        
  14. **
  15. **        DISCLAIMER  
  16. **  
  17. **    Novell, Inc. makes no representations or warranties with respect to
  18. **    any NetWare software, and specifically disclaims any express or
  19. **    implied warranties of merchantability, title, or fitness for a
  20. **    particular purpose.  
  21. **
  22. **    Distribution of any NetWare software is forbidden without the
  23. **    express written consent of Novell, Inc.  Further, Novell reserves
  24. **    the right to discontinue distribution of any NetWare software.
  25. **    
  26. **    Novell is not responsible for lost profits or revenue, loss of use
  27. **    of the software, loss of data, costs of re-creating lost data, the
  28. **    cost of any substitute equipment or program, or claims by any party
  29. **    other than you.  Novell strongly recommends a backup be made before
  30. **    any software is installed.   Technical support for this software
  31. **    may be provided at the discretion of Novell.
  32. **
  33. **    Programmers:
  34. **
  35. **        Ini    Who                        Firm
  36. **        -----------------------------------------------------------------------
  37. **        KVW    Kevin V White                Novell Developer Support.
  38. **
  39. **    History:
  40. **
  41. **        When        Who    What
  42. **        -----------------------------------------------------------------------
  43. **        07-21-94    kvw    First code.
  44. **        07-22-94    kvw    Added disclaimer
  45. **        09-16-94    kvw    Changed acsCloseStream() to acsAbortStream
  46. */
  47.  
  48. /****************************************************************************
  49. **    Include headers, macros, function prototypes, etc.
  50. */
  51.  
  52.     /*------------------------------------------------------------------------
  53.     **    ANSI
  54.     */
  55.     #include <stdio.h>
  56.     #include <string.h>
  57.  
  58.     /*------------------------------------------------------------------------
  59.     **    Windows
  60.     */
  61.     #include <windows.h>
  62.  
  63.     /*------------------------------------------------------------------------
  64.     **    Telephony
  65.     */
  66.     #include <acs.h>
  67.     #include <csta.h>
  68.  
  69. /****************************************************************************
  70. **    This function is the entire program, as it is very simple.
  71. **    Prompt user for input, open a stream, make a call, close the stream.
  72. */
  73. void main(void)
  74. {
  75.  
  76.     /*------------------------------------------------------------------
  77.     ** The following are defined for the first call, acsOpenStream
  78.     */
  79.     ACSHandle_t         acsHandle;
  80.     InvokeIDType_t        invokeIDType;
  81.     InvokeID_t        invokeID;
  82.     StreamType_t        streamType;
  83.     ServerID_t        serverID;
  84.     LoginID_t        loginID;
  85.     Passwd_t        passwd;
  86.     AppName_t        applicationName;
  87.     Level_t            acsLevelReq;
  88.     Version_t        apiVer;
  89.     unsigned short        sendQSize;
  90.     unsigned short        sendExtraBufs;
  91.     unsigned short        recvQSize;
  92.     unsigned short        recvExtraBufs;
  93.     PrivateData_t        *privateData;
  94.     RetCode_t        rCode;
  95.  
  96.     /*------------------------------------------------------------------
  97.     ** The following are additional variables necessary for
  98.     ** acsGetEventBlock
  99.     */
  100.     CSTAEvent_t            eventBuffer;
  101.     unsigned short        eventBufferSize;
  102.     unsigned short        numEvents;
  103.  
  104.     /*------------------------------------------------------------------
  105.     ** The following are for the cstaMakeCall
  106.     */
  107.     DeviceID_t            caller,callee;
  108.  
  109.     /*------------------------------------------------------------------
  110.     ** Miscellaneous variables
  111.     */
  112.     short done=0;
  113.  
  114.  
  115.     /*------------------------------------------------------------------
  116.     ** Setup parameters for call to open stream.  Also, prompt user for
  117.     ** input.
  118.     */
  119.     invokeIDType=LIB_GEN_ID;
  120.     invokeID=0;          /* don't need it, but set to zero anyway */
  121.     streamType=ST_CSTA;     /* want to use csta functions */
  122.  
  123.     strcpy(serverID,"ATT#G3_SWITCH#CSTA#KVWHITETEL");
  124.  
  125.     printf("\nEnter your user name:");
  126.     scanf("%s",loginID);
  127.     printf("\nEnter your password:");
  128.     scanf("%s",passwd);
  129.     printf("\nEnter your extension:");
  130.     scanf("%s",caller);
  131.     printf("\nEnter the extension you want to call:");
  132.     scanf("%s",callee);
  133.  
  134.     strcpy(applicationName,"Simple App");
  135.     acsLevelReq=ACS_LEVEL1;
  136.     strcpy(apiVer,CSTA_API_VERSION);
  137.     sendQSize=0;         /* default size queue*/
  138.     sendExtraBufs=0;     /* use default number */
  139.     recvQSize=0;         /* use default size */
  140.     recvExtraBufs=0;     /* use default number */
  141.     privateData=NULL;     /* no private data */
  142.  
  143.     /*------------------------------------------------------------------
  144.     ** Open the stream with above parameters
  145.     */
  146.     rCode=acsOpenStream(&acsHandle,invokeIDType,invokeID,streamType,
  147.             &serverID,&loginID,&passwd,&applicationName,acsLevelReq,
  148.             &apiVer,sendQSize,sendExtraBufs,recvQSize,recvExtraBufs,
  149.             privateData);
  150.  
  151.     if (rCode < 0)
  152.     {
  153.         printf("acsOpenStream failure...");
  154.         return;
  155.     }
  156.     else
  157.     {
  158.         printf("acsOpenStream success\n");
  159.         invokeID=rCode;
  160.     }
  161.  
  162.     /*------------------------------------------------------------------
  163.     ** Block until the confirmation has been received that the stream
  164.     ** was successfully opened.  Just because NetWare returned the function
  165.     ** code doesn't mean the stream has been opened yet.
  166.     */
  167.     eventBufferSize=sizeof(CSTAEvent_t);
  168.     rCode=acsGetEventBlock(acsHandle,&eventBuffer,&eventBufferSize,
  169.             privateData,&numEvents);
  170.     if(rCode==ACSPOSITIVE_ACK)
  171.     {
  172.         if(eventBuffer.eventHeader.eventType == ACS_OPEN_STREAM_CONF)
  173.         {
  174.             printf("ACS_OPEN_STREAM_CONF message has been received\n");
  175.         }
  176.         else
  177.         {
  178.             printf("event type is incorrect...");
  179.             return;
  180.         }
  181.     }
  182.     else
  183.     {
  184.         printf("acsGetEventBlock failure...");
  185.         return;
  186.     }
  187.  
  188.     /*------------------------------------------------------------------
  189.     ** Now that the stream has been successfully opened, go ahead and
  190.     ** issue the make call function.
  191.     */
  192.     rCode=cstaMakeCall(acsHandle,invokeID,&caller,&callee,
  193.     privateData);
  194.  
  195.     /*------------------------------------------------------------------
  196.     ** Now we need to poll for events until a confirmation has been 
  197.     ** received that the PBX has been able to make the call.  Note that 
  198.     ** if something is invalid, the program will enter an infinite loop,
  199.     ** as this simple program just sits and waits until a confirmation
  200.     ** returns that is successful.
  201.     */
  202.     while (!done)
  203.     {
  204.         rCode=acsGetEventPoll(acsHandle,&eventBuffer,&eventBufferSize,
  205.                 privateData,&numEvents);
  206.  
  207.         if(rCode==ACSPOSITIVE_ACK)
  208.         {
  209.             if(eventBuffer.eventHeader.eventType == CSTA_MAKE_CALL_CONF)
  210.             {
  211.                 printf("CSTA_MAKE_CALL_CONF message has been received\n");
  212.                 done=1;
  213.             }
  214.             else
  215.             {
  216.                 printf("event type is incorrect...");
  217.             }
  218.         }
  219.     }
  220.  
  221.  
  222.     /*------------------------------------------------------------------
  223.     ** All done! Time to close the stream now.
  224.     */
  225.     rCode=acsAbortStream(acsHandle,privateData);
  226.  
  227.     if (rCode < 0)
  228.     {
  229.         printf("acsAbortStream failure...");
  230.         return;
  231.     }
  232.     else
  233.     {
  234.         printf("acsAbortStream success\n");
  235.     }
  236.  
  237.     return;
  238. }
  239.