diff --git a/src/gui/guiframework.cpp b/src/gui/guiframework.cpp index 39264313810b2e7c753a46b1eeaf1a5c9755bc53..aea606107032d80d7ae3e37bf87edade213aaae8 100644 --- a/src/gui/guiframework.cpp +++ b/src/gui/guiframework.cpp @@ -120,24 +120,16 @@ GuiFramework::saveConfig (void) return Manager::instance().saveConfig(); } -int +bool GuiFramework::registerVoIPLink (void) { - if (Manager::instance().registerVoIPLink()) { - return 1; - } else { - return 0; - } + return Manager::instance().registerVoIPLink(); } -int +bool GuiFramework::unregisterVoIPLink (void) { - if (Manager::instance().unregisterVoIPLink()) { - return 1; - } else { - return 0; - } + return Manager::instance().unregisterVoIPLink(); } bool diff --git a/src/gui/guiframework.h b/src/gui/guiframework.h index 6b46a9bc81fab975daae16c333ce35f55b3ca20d..a823eb3e56e47c55abead6615f6f53c6cb62cd01 100644 --- a/src/gui/guiframework.h +++ b/src/gui/guiframework.h @@ -50,10 +50,8 @@ public: virtual void setup() = 0; virtual void sendMessage(const std::string& code, const std::string& seqId, TokenList& arg) = 0; virtual void sendCallMessage(const std::string& code, - const std::string& sequenceId, - CALLID id, - TokenList arg) = 0; - + const std::string& sequenceId, CALLID id, TokenList arg) = 0; + virtual void sendRegistrationState(bool state) = 0; virtual void callFailure(CALLID id) = 0; /* Child class to parent class */ @@ -68,10 +66,10 @@ public: void unmute (); int refuseCall (CALLID id); - bool saveConfig (void); - int registerVoIPLink (void); - int unregisterVoIPLink (void); - bool sendDtmf (CALLID id, char code); + bool saveConfig(void); + bool registerVoIPLink(void); + bool unregisterVoIPLink(void); + bool sendDtmf (CALLID id, char code); bool playDtmf (char code); bool playTone (); bool stopTone (); diff --git a/src/gui/server/guiserverimpl.cpp b/src/gui/server/guiserverimpl.cpp index 2a6625b6a4ec3b692fc4db47a5af060eb325aefc..f59f387e1f6a7a8ca1004ce48c4a0abc0e7ba361 100644 --- a/src/gui/server/guiserverimpl.cpp +++ b/src/gui/server/guiserverimpl.cpp @@ -428,6 +428,15 @@ GUIServerImpl::sendVoiceNbMessage(const std::string& nb_msg) _requestManager.sendResponse(ResponseMessage("020", _getEventsSequenceId, nb_msg)); } +void +GUIServerImpl::sendRegistrationState(bool state) +{ + if (state == true) { + _requestManager.sendResponse(ResponseMessage("003", _getEventsSequenceId, "Registration succeed")); + } else { + _requestManager.sendResponse(ResponseMessage("004", _getEventsSequenceId, "Registration failed")); + } +} void GUIServerImpl::setup() { diff --git a/src/gui/server/guiserverimpl.h b/src/gui/server/guiserverimpl.h index 836dc286572ec77aba044f4237084984322ba812..18172cb462a745de82eca32c937bb8774249df85 100644 --- a/src/gui/server/guiserverimpl.h +++ b/src/gui/server/guiserverimpl.h @@ -49,9 +49,8 @@ public: void displayTextMessage (CALLID id, const std::string& message); void displayErrorText (CALLID id, const std::string& message); void displayError (const std::string& error); - //void startVoiceMessageNotification (void); - //void stopVoiceMessageNotification (void); void sendVoiceNbMessage(const std::string& nb_msg); + void sendRegistrationState(bool state); void setup(); void sendMessage(const std::string& code, const std::string& seqId, TokenList& diff --git a/src/gui/server/requestconfig.cpp b/src/gui/server/requestconfig.cpp index 3bfa954b5154c44fb872fd915f2740e1d610e963..490792b19bd64d8ed4bace940ec90ccd6f2b77be 100644 --- a/src/gui/server/requestconfig.cpp +++ b/src/gui/server/requestconfig.cpp @@ -241,3 +241,24 @@ RequestVolumeMic::execute() } } +ResponseMessage +RequestRegister::execute() +{ + if (GUIServer::instance().registerVoIPLink()) { + return message("200", "OK"); + } else { + return message("500","Registration sending failed"); + } +} + +ResponseMessage +RequestUnregister::execute() +{ + if (GUIServer::instance().unregisterVoIPLink()) { + return message("200", "OK"); + } else { + return message("500","Unregistration sending failed"); + } +} + + diff --git a/src/gui/server/requestconfig.h b/src/gui/server/requestconfig.h index ddf82d4b6c747e9887a8ffeb87a01d5bd77d72f9..db50c74b77afaa427729d776227599343890b611 100644 --- a/src/gui/server/requestconfig.h +++ b/src/gui/server/requestconfig.h @@ -110,4 +110,16 @@ private: int _percent; }; +class RequestRegister : public RequestGlobal { +public: + RequestRegister(const std::string &sequenceId, const TokenList& argList) : RequestGlobal(sequenceId, argList) {} + ResponseMessage execute(); +}; + +class RequestUnregister : public RequestGlobal { +public: + RequestUnregister(const std::string &sequenceId, const TokenList& argList) : RequestGlobal(sequenceId, argList) {} + ResponseMessage execute(); +}; + #endif // __REQUESTCONFIG_H__ diff --git a/src/gui/server/requestfactory.cpp b/src/gui/server/requestfactory.cpp index 8a978c503060d9cfa592e64a9258c34f31927916..6bbbf03c48704a3937ea7cf672813331a11d7b23 100644 --- a/src/gui/server/requestfactory.cpp +++ b/src/gui/server/requestfactory.cpp @@ -128,4 +128,6 @@ RequestFactory::registerAll() { registerRequest<RequestList> ("list"); registerRequest<RequestVolumeSpkr> ("setspkrvolume"); registerRequest<RequestVolumeMic> ("setmicvolume"); + registerRequest<RequestRegister> ("register"); + registerRequest<RequestUnregister> ("unregister"); } diff --git a/src/managerimpl.cpp b/src/managerimpl.cpp index 63aca562cfab670216a3d33c544eff80b2cd5eb9..de32f5a56476c2d40f8a2d05e39d7de0a1ee1186 100644 --- a/src/managerimpl.cpp +++ b/src/managerimpl.cpp @@ -500,39 +500,34 @@ ManagerImpl::initRegisterVoIPLink() /** * Initialize action (main thread) * Note that Registration is only send if STUN is not activated - * @return 1 if setRegister is call without failure, else return 0 + * @return true if setRegister is call without failure, else return false */ -int +bool ManagerImpl::registerVoIPLink (void) { _debug("Register VoIP Link\n"); - int returnValue = 0; - // Cyrille always want to register to receive call | 2005-10-24 10:50 - //if ( !useStun() ) { - if (_voIPLinkVector.at(DFT_VOIP_LINK)->setRegister() >= 0) { - returnValue = 1; - _registerState = REGISTERED; - } else { - _registerState = FAILED; - } - //} else { - // _registerState = UNREGISTERED; - //} + int returnValue = false; + if (_voIPLinkVector.at(DFT_VOIP_LINK)->setRegister() >= 0) { + returnValue = true; + _registerState = REGISTERED; + } else { + _registerState = FAILED; + } return returnValue; } /** * Terminate action (main thread) - * @return 1 if the unregister method is send correctly + * @return true if the unregister method is send correctly */ -int +bool ManagerImpl::unregisterVoIPLink (void) { _debug("Unregister VoIP Link\n"); if (_voIPLinkVector.at(DFT_VOIP_LINK)->setUnregister() == 0) { - return 1; + return true; } else { - return 0; + return false; } } @@ -903,6 +898,24 @@ ManagerImpl::stopVoiceMessageNotification (void) if (_gui) _gui->sendVoiceNbMessage(std::string("0")); } +/** + * SipEvent Thread + */ +void +ManagerImpl::registrationSucceed() +{ + if (_gui) _gui->sendRegistrationState(true); +} + +/** + * SipEvent Thread + */ +void +ManagerImpl::registrationFailed() +{ + if (_gui) _gui->sendRegistrationState(false); +} + /** * Multi Thread */ diff --git a/src/managerimpl.h b/src/managerimpl.h index 5cb69410d18538dbe434c6681da2572420705828..0cf41d603a96e778ad4f7db7278c9905e0e4a427 100644 --- a/src/managerimpl.h +++ b/src/managerimpl.h @@ -131,8 +131,8 @@ public: int refuseCall (CALLID id); bool saveConfig (void); - int registerVoIPLink (void); - int unregisterVoIPLink (void); + bool registerVoIPLink (void); + bool unregisterVoIPLink (void); /** * Handle choice of the DTMF-send-way @@ -161,6 +161,9 @@ public: void startVoiceMessageNotification (const std::string& nb_msg); void stopVoiceMessageNotification (void); + void registrationSucceed(); + void registrationFailed(); + // configuration function requests bool getEvents(); bool getZeroconf(const std::string& sequenceId); diff --git a/src/sipvoiplink.cpp b/src/sipvoiplink.cpp index 4f7cc7579bc06d0d548ab40354aa1eabbe641be5..ffb6239403cd093d9e2bd66d1daa199c5587aae8 100644 --- a/src/sipvoiplink.cpp +++ b/src/sipvoiplink.cpp @@ -179,6 +179,11 @@ SipVoIPLink::setRegister (void) { ManagerImpl& manager = Manager::instance(); + if (_reg_id != -1) { + manager.displayError("Registration already sent. Try to unregister"); + return -1; + } + // all this will be inside the profil associate with the voip link std::string proxy = "sip:" + manager.getConfigString(SIGNALISATION, PROXY); std::string hostname = "sip:" + manager.getConfigString(SIGNALISATION, HOST_PART); @@ -193,11 +198,6 @@ SipVoIPLink::setRegister (void) return -1; } - if (setAuthentication() == -1) { - _debug("No authentication\n"); - return -1; - } - _debug("REGISTER From: %s\n", from.data()); osip_message_t *reg = NULL; eXosip_lock(); @@ -208,14 +208,20 @@ SipVoIPLink::setRegister (void) _reg_id = eXosip_register_build_initial_register ((char*)from.data(), (char*)hostname.data(), NULL, EXPIRES_VALUE, ®); } + eXosip_unlock(); if (_reg_id < 0) { - eXosip_unlock(); return -1; - } + } + + if (setAuthentication() == -1) { + _debug("No authentication\n"); + return -1; + } osip_message_set_header (reg, "Event", "Registration"); osip_message_set_header (reg, "Allow-Events", "presence"); + eXosip_lock(); int i = eXosip_register_send_register (_reg_id, reg); if (i == -2) { _debug("Cannot build registration, check the setup\n"); @@ -231,7 +237,6 @@ SipVoIPLink::setRegister (void) // subscribe to message one time? // subscribeMessageSummary(); - _registrationSend = true; return i; } @@ -254,11 +259,17 @@ SipVoIPLink::setUnregister (void) _debug("UNREGISTER\n"); i = eXosip_register_build_register (_reg_id, 0, ®); } - if (_reg_id < 0) { - eXosip_unlock(); + eXosip_unlock(); + if (i < 0) { return -1; - } + } + + if (setAuthentication() == -1) { + _debug("No authentication\n"); + return -1; + } + eXosip_lock(); i = eXosip_register_send_register (_reg_id, reg); if (i == -2) { _debug("(unregister) Cannot build registration, check the setup\n"); @@ -267,10 +278,9 @@ SipVoIPLink::setUnregister (void) } if (i == -1) { _debug("(unregister) Registration Failed\n"); - eXosip_unlock(); - return -1; } eXosip_unlock(); + _reg_id = -1; return i; } else { // no registration send before @@ -877,10 +887,12 @@ SipVoIPLink::getEvent (void) case EXOSIP_REGISTRATION_SUCCESS: // 1 // Manager::instance().displayStatus(LOGGED_IN_STATUS); + Manager::instance().registrationSucceed(); break; case EXOSIP_REGISTRATION_FAILURE: // 2 //Manager::instance().displayError("getEvent : Registration Failure"); + Manager::instance().registrationFailed(); break; case EXOSIP_MESSAGE_NEW: //27 diff --git a/utilspp/Makefile.am b/utilspp/Makefile.am index d7dbe1c908aa5d1e53077f46deea4e5ed8a7b9c7..01bff558414d75132d9819f1628c8574730913b2 100644 --- a/utilspp/Makefile.am +++ b/utilspp/Makefile.am @@ -14,16 +14,3 @@ libutilspp_la_SOURCES = \ TypeList.hpp libutilspp_la_LIBADD = ./singleton/libsingleton.la - -pkginclude_HEADERS = \ - EmptyType.hpp \ - Functors.hpp \ - NonCopyable.hpp \ - NullType.hpp \ - Singleton.hpp \ - SmartPtr.hpp \ - ThreadingFactoryMutex.hpp ThreadingFactoryMutex.inl \ - ThreadingSingle.hpp ThreadingSingle.inl \ - TypeList.hpp - -pkgincludedir=$(includedir)/utilspp/