/*---------------------------------------------------------------------------*/ /* signalingApp.h */ /* copyright (c) innovaphone 2021 */ /* */ /*---------------------------------------------------------------------------*/ class SignalingAppCall : public istd::listElement { public: SignalingAppCall(const char*uuid, const char* number, const char* sip, const char * name, const char * diverting, const char * called, bool incoming, int videoMode = 0) { this->uuid = _strdup(uuid); this->number = _strdup(number); this->sip = _strdup(sip); this->name = _strdup(name); this->diverting = _strdup(diverting); this->called = _strdup(called); this->connected = false; this->hold = false; this->incoming = incoming; this->videoMode = videoMode; } ~SignalingAppCall() { if (this->uuid) free(this->uuid); if (this->number) free(this->number); if (this->sip) free(this->sip); if (this->name) free(this->name); if (this->diverting) free(this->diverting); if (this->called) free(this->called); } bool incoming; bool connected; bool hold; char * uuid; char * number; char * sip; char * name; char * diverting; char * called; int videoMode; }; class SignalingAppPhoneApps : public istd::listElement { public: SignalingAppPhoneApps(const char * hw, const char * app, const char * title, const char * url) { this->hw = _strdup(hw); this->app = _strdup(app); this->title = _strdup(title); this->url = _strdup(url); } ~SignalingAppPhoneApps() { if (this->hw) free(this->hw); if (this->app) free(this->app); if (this->title) free(this->title); if (this->url) free(this->url); } char * hw; char * app; char * title; char * url; }; class SignalingApiLookupConsumer : public ApiConsumer { class SignalingApp* signaling; void ApiConsumerRecv(const char* provider, const char* src, class json_io& msg, word base) override; public: SignalingApiLookupConsumer(class SignalingApp* client); ~SignalingApiLookupConsumer(); void Lookup(const char * src, const char * number, const char * prefixIntl, const char * prefixNtl, const char * prefixExt, const char * country, const char * area, const char * subscriber); }; class SignalingApiAvatarConsumer : public ApiConsumer { char * user; char * url; char * base; char * domain; char * filename; char * token; char salt[17]; void ApiConsumerUpdate(class json_io & model, word base) override; public: SignalingApiAvatarConsumer(class SignalingApp * client); ~SignalingApiAvatarConsumer(); char * GetAvatarUrl(const char * sip, const char * dn, const char * domain, const char * appdomain); }; class SignalingApiPhoneConsumer : public ApiConsumer { class SignalingApp * signaling; void ApiConsumerUpdate(class json_io & model, word base) override; void ApiConsumerDefaultProvider(const char * defaultApiProvider) override; public: SignalingApiPhoneConsumer(class SignalingApp * client); ~SignalingApiPhoneConsumer(); void ConfigureSoftphone(const char * appname); }; class DefaultApiProviderTimer : public ITimer { public: DefaultApiProviderTimer(IIoMux* ioMux, UTimerSubclass* owner) : ITimer(ioMux, owner) {}; }; class SignalingApp : public IShutdownHandler, public IInstanceLog, public USignaling, public ApiWebsocketClient, public UCallKit, public ULauncherApi, public ISignalingApp, public ISignalingConfig, public UNotifications, public URemoteServices, public UTimerSubclass { friend class SignalingApiProvider; IIoMux * iomux; class ISignaling * signaling; bool closing; bool closed; class ICallKit * callKit; class USignalingApp * signalingAppUser; class DefaultApiProviderTimer defProviderTimer; class INotifications* notifications; class ULauncherApi* launcherApi; char * url; char * sec; char * phys; char * app; char * usr; char * pwd; char * domain; char * appdomain; unsigned timeout; char * hw; unsigned hwTimeout; bool cxSupported; bool registered; int uiRunning; char * uuidTerminateNotify; char * uuidTerminateNotifyConf; int langId; char * defaultApiProvider; bool defaultApiProviderRemoved; class SignalingApiAvatarConsumer * signalingAvatarConsumer; class SignalingApiPhoneConsumer * signalingPhoneConsumer; class SignalingApiLookupConsumer * signalingLookupConsumer; istd::list phoneApps; istd::list calls; char * workingPath; bool dnd; bool remoteServices; char* windowTitle; void TryClose(); void SignalingClosing(class ISignaling *signaling) override; void ClientState(bool up, bool localInit) override; void SaveCredentials(const char * url, const char * sec, const char * phys, const char * app, const char * usr, const char * pwd, const char * domain, const char * appdomain, unsigned timeout) override; void SaveRegistration(const char* hw, const char* phys, unsigned timeout) override; void RegistrationState(bool up) override; void UserSession(bool up) override; void SetDnd(bool dnd) override; bool IsCxSupported() override { return this->cxSupported; }; bool UseRemoteServices() override { return this->remoteServices; }; void SoftphoneAppWindowTitle(const char* title) override; bool IsSoftPhoneStandardApp(); void ReportNewIncomingCall(const char * uuid, const char * number, const char * sip, const char * name, const char * diverting, const char * called, bool hasVideo, bool supportsDTMF, bool supportsHolding, bool supportsGrouping, bool supportsUngrouping) override; void ReportCallEnded(const char * uuid, int reason) override; void ReportCallConnected(const char * uuid, bool connected, const char* number, const char* sip, const char* name, const char* diverting, const char* called, bool hasVideo, bool supportsDTMF, bool supportsHolding, bool supportsGrouping, bool supportsUngrouping) override; void ReportCallHold(const char * uuid) override; void ReportCallRetrieve(const char * uuid) override; void RequestStartCall(const char * uuid, const char * number, const char * name, bool video, bool sendingComplete) override; void RequestStartRinging(const char* uuid) override; void ReportOutgoingCallAlerting(const char * uuid, const char * name, const char * sip, const char * num) override; void ReportNameIdentification(const char* uuid, const char* number, const char* sip, const char* name, const char* diverting, const char* called, bool hasVideo, bool supportsDTMF, bool supportsHolding, bool supportsGrouping, bool supportsUngrouping) override; void Lookup(const char * src, const char * number, const char * prefixIntl, const char * prefixNtl, const char * prefixExt, const char * country, const char * area, const char * subscriber) override; void Shutdown() override; void ShutdownTimeout() override {}; void ApiWebsocketClientCloseComplete() override; void CxSupported(bool supported) override; void CxStartCallAction(const char * uuid, const char * number, const char * name, bool video) override; void CxAnswerCallAction(const char * uuid) override; void CxEndCallAction(const char * uuid, enum CxCallError callError) override; void CxSetHeldCallAction(const char * uuid, bool held) override; void CxSetMutedCallAction(const char * uuid, bool muted) override; void CxAudioRouteChanged(const char * uuid, const char * deviceId) override; void CxSetGroupCallAction(const char * uuid, const char * with) override; void CxPlayDTMFCallAction(const char * uuid, const char * digits) override; void CxCallError(const char * uuid, enum CxCallError callError) override; void CxShowIncomingCallUi(const char * uuid) override; void CxCheckIncomingCall(const char * uuid) override; void LauncherApiSetLangId(const char* langId) override; void SetNoVpnAddresses(bool noVpnAddresses) override; void SetRecordingParameters(const char* url, bool forceUrl, bool isRecordingByDefaultOn, bool forceDefaultOn, bool recordExternalOnly, bool forceExternalOnly) override; void TimerOnTimeout(DefaultApiProviderTimer* timer) override; void LocalNotificationClicked(const char* ref, enum LocalNotificationAction action, const char* replyText) override; void ReportIncomingCall(const char* uuid, const char* name, const char* sip, const char* num, const char* diverting, const char* called, const char* app, const char* domain, const char* appdomain); void ReportMissedCall(const char* uuid, const char* name, const char* sip, const char* num, const char* diverting, const char* called, const char* app, const char* domain, const char* appdomain); void RemoveNotification(const char* ref); void NotificationHoldTerminateCall(const char* uuid, const char* name, const char* sip, const char* num, const char* diverting, const char* called, const char* app, const char* domain, const char* appdomain); void NotificationTerminateCall(const char* uuid, const char* name, const char* sip, const char* num, const char* diverting, const char* called, const char* app, const char* domain, const char* appdomain); void PhoneAnswerCallAction(const char* uuid); void PhoneEndCallAction(const char* uuid, int callError); bool StartCall(const char* sip, const char* num, const char* dn, StartCallVideoMode videoMode, bool sendingComplete = true) override; void ClientConnected() override; void ClientDisconnected() override; public: SignalingApp(IIoMux * const iomux, class ULauncherApi* launcherApi, class ISocketProvider * localSocketProvider, class ISocketProvider * tcpSocketProvider, class ISocketProvider * tlsSocketProvider, class IDns * dns, class INotifications* notifications, const char * apiRelayUrl, const char * servicePassword, const char * workingPath, const char * apiRelayPath = nullptr, class ICallKit * callKit = nullptr, class USignalingApp * signalingAppUser = nullptr); virtual ~SignalingApp(); const char * GetAppName() const { return "SignalingApp"; } const char * GetAppDomain() const { return NULL; } void SetSignaling(ISignaling *signaling); char * GetAvatarUrl(const char * sip, const char * dn, const char * domain, const char * appdomain); void PhoneAppAvailable(const char * hw, const char * app, const char * title, const char * url); void DefaultApiProvider(const char * defaultApiProvider); void RegistrationCheck(); void LookupInfo(const char * src, class json_io& msg, word base); };