[server] / trunk / server / src / appdiastar.cxx Repository:
ViewVC logotype

View of /trunk/server/src/appdiastar.cxx

Parent Directory Parent Directory | Revision Log Revision Log


Revision 74 - (download) (annotate)
Wed Apr 8 08:16:20 2009 UTC (4 years, 2 months ago) by jtarlton
Original Path: trunk/server/src/appwoomera.cxx
File size: 4418 byte(s)
    1 /*
    2  * This file is part of the Dialogic Woomera Server project.
    3  *
    4  *
    5  * Copyright (C) 2009 Dialogic Corporation
    6  * All Rights Reserved
    7  *
    8  */
    9 
   10 /*!
   11  * \file    appwoomera.cxx
   12  * \brief   Woomera HMP server.
   13  * \author  John Tarlton  <john.tarlton@dialogic.com>
   14  * \author  Antony Martin <antony.martin@dialogic.com>
   15  * \version 0.1
   16  */
   17 
   18 
   19 /*----------------------------- Dependencies -------------------------------*/
   20 
   21 #include "logger.h"
   22 #include "getoption.h"
   23 #include "dialogicmanager.h"
   24 
   25 #include <woomera.h>
   26 
   27 /*--------------------------------------------------------------------------*/
   28 DialogicManager* dm;  //FIXME make singleton!
   29 
   30 
   31 /*
   32  * ISDN protocol callback for Woomera messages.
   33  */
   34 woomera_server_response* protocol_message_handler( woomera_callctlr_command* msg,
   35                                                    void* prot_user_data )
   36 {
   37   switch ( msg->e )
   38   {
   39     case WOOMERA_CALLCTL_COMMAND_MAKE_CALL:
   40       {
   41         woomera_callctlr_command_make_call* callParms = &msg->m.make_call;
   42         woomera_server_response* response = woomera_server_response_new(msg->connection_id);
   43 
   44         // get number to dial
   45         std::string remote_number;
   46         if ( woomera_mime_includes(msg->common_mime, woomera_key_remote_url) != 0 )
   47         {
   48           remote_number = woomera_mime_get_string(msg->common_mime, woomera_key_remote_url);
   49         }
   50         else
   51         {
   52           remote_number = callParms->called_number;
   53         }
   54         //FIXME CLI name and number + media
   55         dm->makeCall(msg->call_id, "1234", "local", remote_number);
   56 
   57         response->response = 200;
   58         strcpy(response->args, "Call started");
   59         return response;
   60       }
   61       break;
   62 
   63     case WOOMERA_CALLCTL_COMMAND_HANGUP_CALL:
   64       {
   65         // declare response
   66         woomera_server_response* response = woomera_server_response_new(msg->connection_id);
   67         if ( !dm->hangup(msg->call_id) )
   68         {
   69           response->response = 404;
   70           strcpy(response->args, "Call not found");
   71         }
   72         else
   73         {
   74           response->response = 200;
   75           strcpy(response->args, "Call cleared");
   76         }
   77         return response;
   78       }
   79       break;
   80 
   81     case WOOMERA_CALLCTL_COMMAND_ANSWER_CALL:
   82       {
   83         woomera_server_response * response = woomera_server_response_new(msg->connection_id);
   84         if ( !dm->answer(msg->call_id) )
   85         {
   86           response->response = 404;
   87           strcpy(response->args, "Call not found");
   88         }
   89         else
   90         {
   91           response->response = 200;
   92           strcpy(response->args, "Call answered");
   93         }
   94         return response;
   95       }
   96       break;
   97 
   98     default:
   99       break;
  100   }
  101   return 0;
  102 }
  103 
  104 
  105 /*
  106  * ISDN protocol callback for Woomera media
  107  */
  108 int protocol_media_handler( void* user_data,
  109                             void* call_user_data,
  110                             const char* call_id,
  111                             unsigned session,
  112                             unsigned int cmd,
  113                             void* parm,
  114                             int parmlen )
  115 {
  116   switch ( cmd )
  117   {
  118     case WOOMERA_MEDIA_CTL_READ_START:
  119       return 1;
  120 
  121     case WOOMERA_MEDIA_CTL_READ_STOP:
  122       return 1;
  123 
  124     case WOOMERA_MEDIA_CTL_READ:
  125       return 0;
  126 
  127     case WOOMERA_MEDIA_CTL_WRITE_START:
  128       return 1;
  129 
  130     case WOOMERA_MEDIA_CTL_WRITE_STOP:
  131       return 1;
  132 
  133     case WOOMERA_MEDIA_CTL_WRITE:
  134       return 0;
  135   }
  136   return 0;
  137 }
  138 
  139 
  140 
  141 
  142 /*
  143  * Protocol definition.
  144  */
  145 static woomera_protocol_def isdn_protocol = {
  146   WOOMERA_PROTOCOL_READ_PUSH | WOOMERA_PROTOCOL_WRITE_PUSH,
  147   protocol_message_handler,
  148   protocol_media_handler
  149 };
  150 
  151 
  152 /*!
  153  *
  154  */
  155 void appwoomera_run(const GetOptions& opts)
  156 {
  157 
  158   LOGDEBUG("appwoomera_run()");
  159 
  160   /* Command line options
  161    */
  162   std::string opt_woomera_port = opts.getValue("woomera-port");
  163   if ( opt_woomera_port.empty() )
  164   {
  165     opt_woomera_port = "42420";
  166   }
  167 
  168   /* intialise dialogic
  169    */
  170   dm = new DialogicManager;
  171   dm->init();
  172 
  173 
  174   /* initialise woomera subsystem
  175    */
  176   woomera_init();
  177   woomera_server* server = woomera_server_new();
  178   woomera_callctlr* callctlr = woomera_callctlr_new(woomera_server_send_event, server);
  179   woomera_callctlr_add_protocol(callctlr, &isdn_protocol, "isdn",  0);
  180 
  181   /* create and run the server
  182    */
  183   woomera_server_attr * attr = woomera_server_attr_new();
  184   attr->server    = server;
  185   attr->callctlr  = callctlr;
  186   attr->port      = atoi(opt_woomera_port.c_str());
  187   attr->timeout   = 1000;
  188   attr->callback  = 0;    /* function that checks apps own fdS, called by the server poll loop */
  189   attr->user_data = 0;
  190 
  191   woomera_server_run(attr);
  192 
  193   /* exit
  194    */
  195   woomera_server_delete(server);
  196  }
  197 
  198 
  199 /* vim:ts=4:set nu:
  200  * EOF
  201  */

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.8