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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 57 - (download) (annotate)
Mon Apr 6 16:05:11 2009 UTC (4 years, 1 month ago) by jtarlton
File size: 4890 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 
   29 
   30 /*
   31  * ISDN protocol callback for Woomera messages.
   32  */
   33 woomera_server_response* protocol_message_handler( woomera_callctlr_command* msg,
   34                                                    void* prot_user_data )
   35 {
   36   switch ( msg->e )
   37   {
   38     case WOOMERA_CALLCTL_COMMAND_MAKE_CALL:
   39       {
   40         woomera_callctlr_command_make_call* callParms = &msg->m.make_call;
   41         woomera_server_response* response = woomera_server_response_new(msg->connection_id);
   42 
   43         // get number to dial
   44         std::string remote_number;
   45         if ( woomera_mime_includes(msg->common_mime, woomera_key_remote_url) != 0 )
   46         {
   47           remote_number = woomera_mime_get_string(msg->common_mime, woomera_key_remote_url);
   48         }
   49         else
   50         {
   51           remote_number = callParms->called_number;
   52         }
   53         //dm->makeCall(local_number, local_name, remote_number);
   54 //        dialogicIdMap_.insert(dialogic_id_map_t::value_type(callToken, msg->call_id));
   55 //        woomeraIdMap_.insert(woomera_id_map_t::value_type(msg->call_id, callToken));
   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 
   68 /*        // find Dialogic I
   69         dialogic_id_map_t::iterator i = dialogicIdMap.find(msg->call_id);
   70         if ( i == dialogicIdMap.end() )
   71         {
   72           response->response = 404;
   73           strcpy(response->args, "Call not found");
   74         }
   75         else */
   76         {
   77           // send request to Dialogic to hangup the call
   78 //          dm->hangup();
   79 
   80           response->response = 200;
   81           strcpy(response->args, "Call cleared");
   82 
   83           // clean up maps
   84 //          dialogicIdMap_.erase(i->second);
   85 //          woomeraIdMap_.erase(msg->call_id);
   86         }
   87         return response;
   88       }
   89       break;
   90 
   91     case WOOMERA_CALLCTL_COMMAND_ANSWER_CALL:
   92       {
   93         woomera_server_response * response = woomera_server_response_new(msg->connection_id);
   94 /*
   95         dailogic_id_map_t::iterator i = dialogicIdMap_.find(msg->call_id);
   96         if ( i == dialogicIdMap.end() )
   97         {
   98           response->response = 404;
   99           strcpy(response->args, "Call not found");
  100         }
  101         else */
  102         {
  103           response->response = 200;
  104           strcpy(response->args, "Call answered");
  105           //dm->answer();
  106         }
  107         return response;
  108       }
  109       break;
  110 
  111     default:
  112       break;
  113   }
  114 
  115   return 0;
  116 }
  117 
  118 
  119 /*
  120  * ISDN protocol callback for Woomera media
  121  */
  122 int protocol_media_handler( void* user_data,
  123                             void* call_user_data,
  124                             const char* call_id,
  125                             unsigned session,
  126                             unsigned int cmd,
  127                             void* parm,
  128                             int parmlen )
  129 {
  130   switch ( cmd )
  131   {
  132     case WOOMERA_MEDIA_CTL_READ_START:
  133       return 1;
  134 
  135     case WOOMERA_MEDIA_CTL_READ_STOP:
  136       return 1;
  137 
  138     case WOOMERA_MEDIA_CTL_READ:
  139       return 0;
  140 
  141     case WOOMERA_MEDIA_CTL_WRITE_START:
  142       return 1;
  143 
  144     case WOOMERA_MEDIA_CTL_WRITE_STOP:
  145       return 1;
  146 
  147     case WOOMERA_MEDIA_CTL_WRITE:
  148       return 0;
  149   }
  150   return 0;
  151 }
  152 
  153 
  154 
  155 
  156 /*
  157  * Protocol definition.
  158  */
  159 static woomera_protocol_def isdn_protocol = {
  160   WOOMERA_PROTOCOL_READ_PUSH | WOOMERA_PROTOCOL_WRITE_PUSH,
  161   protocol_message_handler,
  162   protocol_media_handler
  163 };
  164 
  165 
  166 /*!
  167  *
  168  */
  169 void appwoomera_run(const GetOptions& opts)
  170 {
  171 
  172   LOGDEBUG("appwoomera_run()");
  173 
  174   /* Command line options
  175    */
  176   std::string opt_woomera_port = opts.getValue("woomera-port");
  177   if ( opt_woomera_port.empty() )
  178   {
  179     opt_woomera_port = "42420";
  180   }
  181 
  182   /* intialise dialogic
  183    */
  184   DialogicManager* dm = new DialogicManager;
  185   dm->init();
  186 
  187 
  188   /* initialise woomera subsystem
  189    */
  190   woomera_init();
  191   woomera_server* server = woomera_server_new();
  192   woomera_callctlr* callctlr = woomera_callctlr_new(woomera_server_send_event, server);
  193   woomera_callctlr_add_protocol(callctlr, &isdn_protocol, "isdn",  0);
  194 
  195   /* create and run the server
  196    */
  197   woomera_server_attr * attr = woomera_server_attr_new();
  198   attr->server    = server;
  199   attr->callctlr  = callctlr;
  200   attr->port      = atoi(opt_woomera_port.c_str());
  201   attr->timeout   = 1000;
  202   attr->callback  = 0;    /* function that checks apps own fdS, called by the server poll loop */
  203   attr->user_data = 0;
  204 
  205   woomera_server_run(attr);
  206 
  207   /* exit
  208    */
  209   woomera_server_delete(server);
  210  }
  211 
  212 
  213 /* vim:ts=4:set nu:
  214  * EOF
  215  */

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