mirror of
https://git.jami.net/savoirfairelinux/jami-daemon.git
synced 2025-08-12 22:09:25 +08:00
add voicemail notification
add a port field in the GTK account window configuration
This commit is contained in:
@ -44,6 +44,7 @@ GtkWidget * entryProtocol;
|
|||||||
GtkWidget * entryEnabled;
|
GtkWidget * entryEnabled;
|
||||||
GtkWidget * entryUsername;
|
GtkWidget * entryUsername;
|
||||||
GtkWidget * entryHostname;
|
GtkWidget * entryHostname;
|
||||||
|
GtkWidget * entryPort;
|
||||||
GtkWidget * entryPassword;
|
GtkWidget * entryPassword;
|
||||||
GtkWidget * stunServer;
|
GtkWidget * stunServer;
|
||||||
GtkWidget * stunEnable;
|
GtkWidget * stunEnable;
|
||||||
@ -104,6 +105,7 @@ show_account_window (account_t * a)
|
|||||||
gchar * curAlias = "";
|
gchar * curAlias = "";
|
||||||
gchar * curUsername = "";
|
gchar * curUsername = "";
|
||||||
gchar * curHostname = "";
|
gchar * curHostname = "";
|
||||||
|
gchar * curPort = "5060";
|
||||||
gchar * curPassword = "";
|
gchar * curPassword = "";
|
||||||
/* TODO: add curProxy, and add boxes for Proxy support */
|
/* TODO: add curProxy, and add boxes for Proxy support */
|
||||||
gchar * stun_enabled = "FALSE";
|
gchar * stun_enabled = "FALSE";
|
||||||
@ -126,6 +128,7 @@ show_account_window (account_t * a)
|
|||||||
}
|
}
|
||||||
else if (strcmp(curAccountType, "SIP") == 0) {
|
else if (strcmp(curAccountType, "SIP") == 0) {
|
||||||
curHostname = g_hash_table_lookup(currentAccount->properties, ACCOUNT_SIP_HOST);
|
curHostname = g_hash_table_lookup(currentAccount->properties, ACCOUNT_SIP_HOST);
|
||||||
|
curPort = g_hash_table_lookup(currentAccount->properties, ACCOUNT_SIP_PORT);
|
||||||
curPassword = g_hash_table_lookup(currentAccount->properties, ACCOUNT_SIP_PASSWORD);
|
curPassword = g_hash_table_lookup(currentAccount->properties, ACCOUNT_SIP_PASSWORD);
|
||||||
curUsername = g_hash_table_lookup(currentAccount->properties, ACCOUNT_SIP_USER);
|
curUsername = g_hash_table_lookup(currentAccount->properties, ACCOUNT_SIP_USER);
|
||||||
stun_enabled = g_hash_table_lookup(currentAccount->properties, ACCOUNT_SIP_STUN_ENABLED);
|
stun_enabled = g_hash_table_lookup(currentAccount->properties, ACCOUNT_SIP_STUN_ENABLED);
|
||||||
@ -156,7 +159,7 @@ show_account_window (account_t * a)
|
|||||||
gtk_box_pack_start(GTK_BOX(dialog->vbox), frame, FALSE, FALSE, 0);
|
gtk_box_pack_start(GTK_BOX(dialog->vbox), frame, FALSE, FALSE, 0);
|
||||||
gtk_widget_show(frame);
|
gtk_widget_show(frame);
|
||||||
|
|
||||||
table = gtk_table_new ( 8, 2 , FALSE/* homogeneous */);
|
table = gtk_table_new ( 9, 2 , FALSE/* homogeneous */);
|
||||||
gtk_table_set_row_spacings( GTK_TABLE(table), 10);
|
gtk_table_set_row_spacings( GTK_TABLE(table), 10);
|
||||||
gtk_table_set_col_spacings( GTK_TABLE(table), 10);
|
gtk_table_set_col_spacings( GTK_TABLE(table), 10);
|
||||||
gtk_widget_show(table);
|
gtk_widget_show(table);
|
||||||
@ -224,19 +227,27 @@ show_account_window (account_t * a)
|
|||||||
gtk_entry_set_text(GTK_ENTRY(entryHostname), curHostname);
|
gtk_entry_set_text(GTK_ENTRY(entryHostname), curHostname);
|
||||||
gtk_table_attach ( GTK_TABLE( table ), entryHostname, 1, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
|
gtk_table_attach ( GTK_TABLE( table ), entryHostname, 1, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
|
||||||
|
|
||||||
label = gtk_label_new_with_mnemonic (_("_User name"));
|
label = gtk_label_new_with_mnemonic (_("_Port"));
|
||||||
gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 6, 7, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
|
gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 6, 7, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
|
||||||
gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
|
gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
|
||||||
|
entryPort = gtk_entry_new();
|
||||||
|
gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryPort);
|
||||||
|
gtk_entry_set_text(GTK_ENTRY(entryPort), curPort);
|
||||||
|
gtk_table_attach ( GTK_TABLE( table ), entryPort, 1, 2, 6, 7, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
|
||||||
|
|
||||||
|
label = gtk_label_new_with_mnemonic (_("_User name"));
|
||||||
|
gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 7, 8, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
|
||||||
|
gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
|
||||||
entryUsername = sexy_icon_entry_new();
|
entryUsername = sexy_icon_entry_new();
|
||||||
//image = gtk_image_new_from_stock( GTK_STOCK_DIALOG_AUTHENTICATION , GTK_ICON_SIZE_SMALL_TOOLBAR );
|
//image = gtk_image_new_from_stock( GTK_STOCK_DIALOG_AUTHENTICATION , GTK_ICON_SIZE_SMALL_TOOLBAR );
|
||||||
image = gtk_image_new_from_file( ICONS_DIR "/stock_person.svg" );
|
image = gtk_image_new_from_file( ICONS_DIR "/stock_person.svg" );
|
||||||
sexy_icon_entry_set_icon( SEXY_ICON_ENTRY(entryUsername), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE(image) );
|
sexy_icon_entry_set_icon( SEXY_ICON_ENTRY(entryUsername), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE(image) );
|
||||||
gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryUsername);
|
gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryUsername);
|
||||||
gtk_entry_set_text(GTK_ENTRY(entryUsername), curUsername);
|
gtk_entry_set_text(GTK_ENTRY(entryUsername), curUsername);
|
||||||
gtk_table_attach ( GTK_TABLE( table ), entryUsername, 1, 2, 6, 7, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
|
gtk_table_attach ( GTK_TABLE( table ), entryUsername, 1, 2, 7, 8, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
|
||||||
|
|
||||||
label = gtk_label_new_with_mnemonic (_("_Password"));
|
label = gtk_label_new_with_mnemonic (_("_Password"));
|
||||||
gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 7, 8, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
|
gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 8, 9, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
|
||||||
gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
|
gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
|
||||||
entryPassword = sexy_icon_entry_new();
|
entryPassword = sexy_icon_entry_new();
|
||||||
image = gtk_image_new_from_stock( GTK_STOCK_DIALOG_AUTHENTICATION , GTK_ICON_SIZE_SMALL_TOOLBAR );
|
image = gtk_image_new_from_stock( GTK_STOCK_DIALOG_AUTHENTICATION , GTK_ICON_SIZE_SMALL_TOOLBAR );
|
||||||
@ -244,15 +255,15 @@ show_account_window (account_t * a)
|
|||||||
gtk_entry_set_visibility(GTK_ENTRY(entryPassword), FALSE);
|
gtk_entry_set_visibility(GTK_ENTRY(entryPassword), FALSE);
|
||||||
gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryPassword);
|
gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryPassword);
|
||||||
gtk_entry_set_text(GTK_ENTRY(entryPassword), curPassword);
|
gtk_entry_set_text(GTK_ENTRY(entryPassword), curPassword);
|
||||||
gtk_table_attach ( GTK_TABLE( table ), entryPassword, 1, 2, 7, 8, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
|
gtk_table_attach ( GTK_TABLE( table ), entryPassword, 1, 2, 8, 9, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
|
||||||
|
|
||||||
label = gtk_label_new_with_mnemonic (_("_Voicemail box #"));
|
label = gtk_label_new_with_mnemonic (_("_Voicemail box #"));
|
||||||
gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 8, 9, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
|
gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 9, 10, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
|
||||||
gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
|
gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
|
||||||
entryMailbox = gtk_entry_new();
|
entryMailbox = gtk_entry_new();
|
||||||
gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryMailbox);
|
gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryMailbox);
|
||||||
gtk_entry_set_text(GTK_ENTRY(entryMailbox), curMailbox);
|
gtk_entry_set_text(GTK_ENTRY(entryMailbox), curMailbox);
|
||||||
gtk_table_attach ( GTK_TABLE( table ), entryMailbox, 1, 2, 8, 9, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
|
gtk_table_attach ( GTK_TABLE( table ), entryMailbox, 1, 2, 9, 10, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
|
||||||
|
|
||||||
gtk_widget_show_all( table );
|
gtk_widget_show_all( table );
|
||||||
gtk_container_set_border_width (GTK_CONTAINER(table), 10);
|
gtk_container_set_border_width (GTK_CONTAINER(table), 10);
|
||||||
@ -327,6 +338,11 @@ show_account_window (account_t * a)
|
|||||||
g_hash_table_replace(currentAccount->properties,
|
g_hash_table_replace(currentAccount->properties,
|
||||||
g_strdup(ACCOUNT_SIP_HOST),
|
g_strdup(ACCOUNT_SIP_HOST),
|
||||||
g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryHostname))));
|
g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryHostname))));
|
||||||
|
|
||||||
|
g_hash_table_replace(currentAccount->properties,
|
||||||
|
g_strdup(ACCOUNT_SIP_PORT),
|
||||||
|
g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryPort))));
|
||||||
|
|
||||||
g_hash_table_replace(currentAccount->properties,
|
g_hash_table_replace(currentAccount->properties,
|
||||||
g_strdup(ACCOUNT_SIP_USER),
|
g_strdup(ACCOUNT_SIP_USER),
|
||||||
g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryUsername))));
|
g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryUsername))));
|
||||||
|
@ -44,6 +44,8 @@
|
|||||||
#define ACCOUNT_SIP_USER "SIP.username"
|
#define ACCOUNT_SIP_USER "SIP.username"
|
||||||
/** SIP parameter: password */
|
/** SIP parameter: password */
|
||||||
#define ACCOUNT_SIP_PASSWORD "SIP.password"
|
#define ACCOUNT_SIP_PASSWORD "SIP.password"
|
||||||
|
// SIP connection port
|
||||||
|
#define ACCOUNT_SIP_PORT "SIP.port"
|
||||||
/** SIP parameter: proxy address */
|
/** SIP parameter: proxy address */
|
||||||
#define ACCOUNT_SIP_PROXY "SIP.proxy"
|
#define ACCOUNT_SIP_PROXY "SIP.proxy"
|
||||||
/** SIP parameter: stun server address */
|
/** SIP parameter: stun server address */
|
||||||
|
@ -56,6 +56,8 @@ typedef std::string AccountID;
|
|||||||
#define SIP_PASSWORD "SIP.password"
|
#define SIP_PASSWORD "SIP.password"
|
||||||
/** SIP parameter : host name */
|
/** SIP parameter : host name */
|
||||||
#define SIP_HOST "SIP.hostPart"
|
#define SIP_HOST "SIP.hostPart"
|
||||||
|
// SIP port
|
||||||
|
#define SIP_PORT "SIP.port"
|
||||||
/** SIP parameter : proxy address */
|
/** SIP parameter : proxy address */
|
||||||
#define SIP_PROXY "SIP.proxy"
|
#define SIP_PROXY "SIP.proxy"
|
||||||
/** SIP parameter : stun server address */
|
/** SIP parameter : stun server address */
|
||||||
|
@ -696,9 +696,10 @@ ManagerImpl::callFailure(const CallID& id)
|
|||||||
|
|
||||||
//THREAD=VoIP
|
//THREAD=VoIP
|
||||||
void
|
void
|
||||||
ManagerImpl::startVoiceMessageNotification(const AccountID& accountId, const std::string& nb_msg)
|
ManagerImpl::startVoiceMessageNotification(const AccountID& accountId, int nb_msg)
|
||||||
{
|
{
|
||||||
if (_dbus) _dbus->getCallManager()->voiceMailNotify(accountId, atoi(nb_msg.c_str()) );
|
_debug("cccccccccccccccccc\n");
|
||||||
|
if (_dbus) _dbus->getCallManager()->voiceMailNotify(accountId, nb_msg) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
//THREAD=VoIP
|
//THREAD=VoIP
|
||||||
@ -2027,6 +2028,7 @@ ManagerImpl::setAccountDetails( const ::DBus::String& accountID,
|
|||||||
setConfig(accountID, SIP_USER, (*details.find(SIP_USER)).second);
|
setConfig(accountID, SIP_USER, (*details.find(SIP_USER)).second);
|
||||||
setConfig(accountID, SIP_PASSWORD, (*details.find(SIP_PASSWORD)).second);
|
setConfig(accountID, SIP_PASSWORD, (*details.find(SIP_PASSWORD)).second);
|
||||||
setConfig(accountID, SIP_HOST, (*details.find(SIP_HOST)).second);
|
setConfig(accountID, SIP_HOST, (*details.find(SIP_HOST)).second);
|
||||||
|
//setConfig(accountID, SIP_PORT, (*details.find(SIP_PORT).second));
|
||||||
setConfig(accountID, SIP_STUN_SERVER,(*details.find(SIP_STUN_SERVER)).second);
|
setConfig(accountID, SIP_STUN_SERVER,(*details.find(SIP_STUN_SERVER)).second);
|
||||||
setConfig(accountID, CONFIG_ACCOUNT_MAILBOX,(*details.find(CONFIG_ACCOUNT_MAILBOX)).second);
|
setConfig(accountID, CONFIG_ACCOUNT_MAILBOX,(*details.find(CONFIG_ACCOUNT_MAILBOX)).second);
|
||||||
setConfig(accountID, SIP_USE_STUN,
|
setConfig(accountID, SIP_USE_STUN,
|
||||||
|
@ -260,7 +260,7 @@ class ManagerImpl {
|
|||||||
* @param accountId The account identifier
|
* @param accountId The account identifier
|
||||||
* @param nb_msg The number of messages
|
* @param nb_msg The number of messages
|
||||||
*/
|
*/
|
||||||
void startVoiceMessageNotification(const AccountID& accountId, const std::string& nb_msg);
|
void startVoiceMessageNotification(const AccountID& accountId, int nb_msg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notify the user that registration succeeded
|
* Notify the user that registration succeeded
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
#include "sipcall.h"
|
#include "sipcall.h"
|
||||||
#include "global.h" // for _debug
|
#include "global.h" // for _debug
|
||||||
#include <sstream> // for media buffer
|
#include <sstream> // for media buffer
|
||||||
#include "sipmanager.h"
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#define _SENDRECV 0
|
#define _SENDRECV 0
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
#include "manager.h"
|
#include "manager.h"
|
||||||
#include "sipcall.h"
|
#include "sipcall.h"
|
||||||
@ -609,19 +610,59 @@ int SIPManager::start_thread(void *arg) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SIPManager::set_voicemail_info( AccountID account, pjsip_msg_body *body ){
|
||||||
|
|
||||||
|
int voicemail, pos_begin, pos_end;
|
||||||
|
std::string voice_str = "Voice-Message: ";
|
||||||
|
std::string delimiter = "/";
|
||||||
|
std::string msg_body, voicemail_str;
|
||||||
|
|
||||||
|
// The voicemail message is formated like that:
|
||||||
|
// Voice-Message: 1/0 . 1 is the number we want to retrieve in this case
|
||||||
|
|
||||||
|
// We get the notification body
|
||||||
|
msg_body = (char*)body->data;
|
||||||
|
std::cout << " body message " << msg_body.c_str() << std::endl;
|
||||||
|
|
||||||
|
// We need the position of the first character of the string voice_str
|
||||||
|
pos_begin = msg_body.find(voice_str);
|
||||||
|
// We need the position of the delimiter
|
||||||
|
pos_end = msg_body.find(delimiter);
|
||||||
|
|
||||||
|
// So our voicemail number between the both index
|
||||||
|
try {
|
||||||
|
|
||||||
|
voicemail_str = msg_body.substr(pos_begin + voice_str.length(), pos_end - ( pos_begin + voice_str.length()));
|
||||||
|
std::cout << "voicemail number : " << voicemail_str << std::endl;
|
||||||
|
voicemail = atoi( voicemail_str.c_str() );
|
||||||
|
}
|
||||||
|
catch( std::out_of_range& e ){
|
||||||
|
std::cerr << e.what() << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We need now to notify the manager
|
||||||
|
if( voicemail != 0 )
|
||||||
|
Manager::instance().startVoiceMessageNotification(account, voicemail);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
pj_bool_t SIPManager::mod_on_rx_request(pjsip_rx_data *rdata) {
|
pj_bool_t SIPManager::mod_on_rx_request(pjsip_rx_data *rdata) {
|
||||||
|
|
||||||
pj_status_t status;
|
pj_status_t status;
|
||||||
pj_str_t reason;
|
pj_str_t reason;
|
||||||
unsigned options = 0;
|
unsigned options = 0;
|
||||||
pjsip_dialog* dialog;
|
pjsip_dialog* dialog;
|
||||||
pjsip_tx_data *tdata;
|
pjsip_tx_data *tdata;
|
||||||
pjmedia_sdp_session *r_sdp;
|
pjmedia_sdp_session *r_sdp;
|
||||||
|
AccountID account_id;
|
||||||
|
|
||||||
/* Handle the incoming call invite in this function */
|
// voicemail part
|
||||||
|
std::string method_name;
|
||||||
|
std::string request;
|
||||||
|
|
||||||
|
// Handle the incoming call invite in this function
|
||||||
_debug("SIPManager: Callback on_rx_request is involved!\n");
|
_debug("SIPManager: Callback on_rx_request is involved!\n");
|
||||||
|
|
||||||
PJ_UNUSED_ARG(rdata);
|
|
||||||
|
|
||||||
/* First, let's got the username and server name from the invite.
|
/* First, let's got the username and server name from the invite.
|
||||||
* We will use them to detect which account is the callee.
|
* We will use them to detect which account is the callee.
|
||||||
*/
|
*/
|
||||||
@ -631,7 +672,16 @@ pj_bool_t SIPManager::mod_on_rx_request(pjsip_rx_data *rdata) {
|
|||||||
std::string userName = std::string(sip_uri->user.ptr, sip_uri->user.slen);
|
std::string userName = std::string(sip_uri->user.ptr, sip_uri->user.slen);
|
||||||
std::string server = std::string(sip_uri->host.ptr, sip_uri->host.slen);
|
std::string server = std::string(sip_uri->host.ptr, sip_uri->host.slen);
|
||||||
|
|
||||||
|
// Get the account id of callee from username and server
|
||||||
|
account_id = getInstance()->getAccountIdFromNameAndServer(userName, server);
|
||||||
|
if(account_id == AccountNULL) {
|
||||||
|
_debug("SIPManager: Username %s doesn't match any account!\n");
|
||||||
|
//delete call;
|
||||||
|
//call = NULL;
|
||||||
|
return PJ_FALSE;
|
||||||
|
}
|
||||||
_debug("SIPManager: The receiver is : %s@%s\n", userName.data(), server.data());
|
_debug("SIPManager: The receiver is : %s@%s\n", userName.data(), server.data());
|
||||||
|
_debug("SIPManager: The callee account id is %s\n", account_id.c_str());
|
||||||
|
|
||||||
/* Now, it is the time to find the information of the caller */
|
/* Now, it is the time to find the information of the caller */
|
||||||
uri = rdata->msg_info.from->uri;
|
uri = rdata->msg_info.from->uri;
|
||||||
@ -641,7 +691,24 @@ pj_bool_t SIPManager::mod_on_rx_request(pjsip_rx_data *rdata) {
|
|||||||
std::string callerServer = std::string(sip_uri->host.ptr, sip_uri->host.slen);
|
std::string callerServer = std::string(sip_uri->host.ptr, sip_uri->host.slen);
|
||||||
std::string peerNumber = caller + "@" + callerServer;
|
std::string peerNumber = caller + "@" + callerServer;
|
||||||
|
|
||||||
/* Respond statelessly any non-INVITE requests with 500 */
|
|
||||||
|
// Get the server voicemail notification
|
||||||
|
// Catch the NOTIFY message
|
||||||
|
if( rdata->msg_info.msg->line.req.method.id == PJSIP_OTHER_METHOD )
|
||||||
|
{
|
||||||
|
method_name = "NOTIFY";
|
||||||
|
// Retrieve all the message. Should contains only the method name but ...
|
||||||
|
request = rdata->msg_info.msg->line.req.method.name.ptr;
|
||||||
|
_debug("request = %s\n", request.c_str());
|
||||||
|
// Check if the message is a notification
|
||||||
|
if( request.find( method_name ) != -1 ) {
|
||||||
|
set_voicemail_info( account_id, rdata->msg_info.msg->body );
|
||||||
|
}
|
||||||
|
pjsip_endpt_respond_stateless(getInstance()->getEndPoint(), rdata, PJSIP_SC_OK, NULL, NULL, NULL);
|
||||||
|
return PJ_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Respond statelessly any non-INVITE requests with 500
|
||||||
if (rdata->msg_info.msg->line.req.method.id != PJSIP_INVITE_METHOD) {
|
if (rdata->msg_info.msg->line.req.method.id != PJSIP_INVITE_METHOD) {
|
||||||
if (rdata->msg_info.msg->line.req.method.id != PJSIP_ACK_METHOD) {
|
if (rdata->msg_info.msg->line.req.method.id != PJSIP_ACK_METHOD) {
|
||||||
pj_strdup2(getInstance()->getAppPool(), &reason, "user agent unable to handle this request ");
|
pj_strdup2(getInstance()->getAppPool(), &reason, "user agent unable to handle this request ");
|
||||||
@ -685,20 +752,11 @@ pj_bool_t SIPManager::mod_on_rx_request(pjsip_rx_data *rdata) {
|
|||||||
* possilbe audio codec will be used in this call
|
* possilbe audio codec will be used in this call
|
||||||
*/
|
*/
|
||||||
if (call->SIPCallInvite(rdata, getInstance()->getAppPool())) {
|
if (call->SIPCallInvite(rdata, getInstance()->getAppPool())) {
|
||||||
// Get the account id of callee from username and server
|
|
||||||
AccountID id = getInstance()->getAccountIdFromNameAndServer(userName, server);
|
|
||||||
if(id == AccountNULL) {
|
|
||||||
_debug("SIPManager: Username %s doesn't match any account!\n");
|
|
||||||
delete call;
|
|
||||||
call = NULL;
|
|
||||||
return PJ_FALSE;
|
|
||||||
}
|
|
||||||
_debug("SIPManager: The callee account id is %s\n", id.c_str());
|
|
||||||
|
|
||||||
// Notify UI there is an incoming call
|
// Notify UI there is an incoming call
|
||||||
if (Manager::instance().incomingCall(call, id)) {
|
if (Manager::instance().incomingCall(call, account_id)) {
|
||||||
// Add this call to the callAccountMap in ManagerImpl
|
// Add this call to the callAccountMap in ManagerImpl
|
||||||
Manager::instance().getAccountLink(id)->addCall(call);
|
Manager::instance().getAccountLink(account_id)->addCall(call);
|
||||||
_debug("SIPManager: Notify UI success!\n");
|
_debug("SIPManager: Notify UI success!\n");
|
||||||
} else {
|
} else {
|
||||||
// Fail to notify UI
|
// Fail to notify UI
|
||||||
|
@ -149,6 +149,8 @@ public:
|
|||||||
static void call_on_tsx_changed(pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_event *e);
|
static void call_on_tsx_changed(pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_event *e);
|
||||||
static int start_thread(void *arg);
|
static int start_thread(void *arg);
|
||||||
static SIPManager* getInstance() {return _current;}
|
static SIPManager* getInstance() {return _current;}
|
||||||
|
|
||||||
|
static void set_voicemail_info( AccountID account, pjsip_msg_body *body );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,9 +40,6 @@
|
|||||||
#define EXOSIP_ERROR_STD -1
|
#define EXOSIP_ERROR_STD -1
|
||||||
#define EXOSIP_ERROR_BUILDING -2
|
#define EXOSIP_ERROR_BUILDING -2
|
||||||
|
|
||||||
// for registration
|
|
||||||
//#define EXPIRES_VALUE 180
|
|
||||||
|
|
||||||
// 1XX responses
|
// 1XX responses
|
||||||
#define DIALOG_ESTABLISHED 101
|
#define DIALOG_ESTABLISHED 101
|
||||||
// see: osip_const.h
|
// see: osip_const.h
|
||||||
@ -60,7 +57,6 @@ SIPVoIPLink::SIPVoIPLink(const AccountID& accountID)
|
|||||||
{
|
{
|
||||||
_evThread = NULL;//new EventThread(this);
|
_evThread = NULL;//new EventThread(this);
|
||||||
|
|
||||||
|
|
||||||
_nMsgVoicemail = 0;
|
_nMsgVoicemail = 0;
|
||||||
_eXosipRegID = EXOSIP_ERROR_STD;
|
_eXosipRegID = EXOSIP_ERROR_STD;
|
||||||
|
|
||||||
@ -793,14 +789,6 @@ SIPVoIPLink::refuse (const CallID& id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Manager::instance().getSipManager()->refuse(call);
|
Manager::instance().getSipManager()->refuse(call);
|
||||||
/*osip_message_t *answerMessage = NULL;
|
|
||||||
eXosip_lock();
|
|
||||||
// not BUSY.. where decline the invitation!
|
|
||||||
int exosipErr = eXosip_call_build_answer(call->getTid(), SIP_DECLINE, &answerMessage);
|
|
||||||
if (exosipErr == 0) {
|
|
||||||
exosipErr = eXosip_call_send_answer(call->getTid(), SIP_DECLINE, answerMessage);
|
|
||||||
}
|
|
||||||
eXosip_unlock();*/
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1482,7 +1470,7 @@ SIPVoIPLink::SIPMessageNew(eXosip_event_t *event)
|
|||||||
|
|
||||||
if (msgVoicemail != 0) {
|
if (msgVoicemail != 0) {
|
||||||
// If there is at least one voice-message, start notification
|
// If there is at least one voice-message, start notification
|
||||||
Manager::instance().startVoiceMessageNotification(getAccountID(), nb_msg);
|
//Manager::instance().startVoiceMessageNotification(getAccountID(), nb_msg);
|
||||||
}
|
}
|
||||||
// http://www.jdrosen.net/papers/draft-ietf-simple-im-session-00.txt
|
// http://www.jdrosen.net/papers/draft-ietf-simple-im-session-00.txt
|
||||||
} else if (MSG_IS_MESSAGE(event->request)) {
|
} else if (MSG_IS_MESSAGE(event->request)) {
|
||||||
|
Reference in New Issue
Block a user