/* * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * Copyright (C) 2005-2009, Anthony Minessale II * * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * * The Initial Developer of the Original Code is * Anthony Minessale II * Portions created by the Initial Developer are Copyright (C) * the Initial Developer. All Rights Reserved. * * Contributor(s): * * Joao Mesquita * */ #ifndef FSHOST_H #define FSHOST_H #include #include #include class Call; #define FSPHONE_GW_STATE_TRYING 0 #define FSPHONE_GW_STATE_REGISTER 1 #define FSPHONE_GW_STATE_REGED 2 #define FSPHONE_GW_STATE_UNREGED 3 #define FSPHONE_GW_STATE_UNREGISTER 4 #define FSPHONE_GW_STATE_FAILED 5 #define FSPHONE_GW_STATE_FAIL_WAIT 6 #define FSPHONE_GW_STATE_EXPIRED 7 #define FSPHONE_GW_STATE_NOREG 8 static const char *fsphone_gw_state_names[] = { "TRYING", "REGISTER", "REGED", "UNREGED", "UNREGISTER", "FAILED", "FAIL_WAIT", "EXPIRED", "NOREG" }; class FSHost : public QThread { Q_OBJECT public: explicit FSHost(QObject *parent = 0); switch_status_t sendCmd(const char *cmd, const char *args, QString *res); void generalEventHandler(switch_event_t *event); Call * getCallByUUID(QString uuid) { return _active_calls.value(uuid, NULL); } QString getGwStateName(int id) { return fsphone_gw_state_names[id]; } protected: void run(void); signals: void coreLoadingError(QString); void ready(void); void ringing(QString); void answered(QString); void newOutgoingCall(QString); void callFailed(QString); void hungup(Call*); void gwStateChange(QString, int); private: switch_status_t processBlegEvent(switch_event_t *, QString); switch_status_t processAlegEvent(switch_event_t *, QString); void printEventHeaders(switch_event_t *event); QHash _active_calls; QHash _bleg_uuids; }; extern FSHost g_FSHost; /* Used to match callback from fs core. We dup the event and call the class method callback to make use of the signal/slot infrastructure. */ static void eventHandlerCallback(switch_event_t *event) { switch_event_t *clone = NULL; if (switch_event_dup(&clone, event) == SWITCH_STATUS_SUCCESS) { g_FSHost.generalEventHandler(clone); } switch_safe_free(clone); } #endif // FSHOST_H