Parent Directory
|
Revision Log
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 |