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 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 |