mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-05-07 05:53:06 +00:00
remove adherence from Sal to liblinphone, improve notification of failed messageso
This commit is contained in:
parent
62ce92ff69
commit
f815b0d5aa
6 changed files with 62 additions and 22 deletions
|
|
@ -801,6 +801,28 @@ static void notify_refer(SalOp *op, SalReferStatus status){
|
|||
}
|
||||
}
|
||||
|
||||
static LinphoneChatMessageState chatStatusSal2Linphone(SalTextDeliveryStatus status){
|
||||
switch(status){
|
||||
case SalTextDeliveryInProgress:
|
||||
return LinphoneChatMessageStateInProgress;
|
||||
case SalTextDeliveryDone:
|
||||
return LinphoneChatMessageStateDelivered;
|
||||
case SalTextDeliveryFailed:
|
||||
return LinphoneChatMessageStateNotDelivered;
|
||||
}
|
||||
return LinphoneChatMessageStateIdle;
|
||||
}
|
||||
|
||||
static void text_delivery_update(SalOp *op, SalTextDeliveryStatus status){
|
||||
LinphoneChatMessage *chat_msg=(LinphoneChatMessage* )sal_op_get_user_pointer(op);
|
||||
if (chat_msg && chat_msg->cb) {
|
||||
chat_msg->cb(chat_msg
|
||||
,chatStatusSal2Linphone(status)
|
||||
,chat_msg->cb_ud);
|
||||
}
|
||||
linphone_chat_message_destroy(chat_msg);
|
||||
}
|
||||
|
||||
SalCallbacks linphone_sal_callbacks={
|
||||
call_received,
|
||||
call_ringing,
|
||||
|
|
@ -818,12 +840,13 @@ SalCallbacks linphone_sal_callbacks={
|
|||
dtmf_received,
|
||||
refer_received,
|
||||
text_received,
|
||||
text_delivery_update,
|
||||
notify,
|
||||
notify_presence,
|
||||
notify_refer,
|
||||
subscribe_received,
|
||||
subscribe_closed,
|
||||
ping_reply
|
||||
ping_reply,
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -136,10 +136,12 @@ LinphoneChatMessage* linphone_chat_room_create_message(const LinphoneChatRoom *c
|
|||
msg->message=ms_strdup(message);
|
||||
return msg;
|
||||
}
|
||||
|
||||
void linphone_chat_message_destroy(LinphoneChatMessage* msg) {
|
||||
if (msg->message) ms_free((void*)msg->message);
|
||||
ms_free((void*)msg);
|
||||
if (msg->message) ms_free(msg->message);
|
||||
ms_free(msg);
|
||||
}
|
||||
|
||||
void linphone_chat_room_send_message2(LinphoneChatRoom *cr, LinphoneChatMessage* msg,LinphoneChatMessageStateChangeCb status_cb,void* ud) {
|
||||
msg->cb=status_cb;
|
||||
msg->cb_ud=ud;
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ typedef struct _CallCallbackObj
|
|||
static const int linphone_call_magic=0x3343;
|
||||
|
||||
struct _LinphoneChatMessage {
|
||||
const char* message;
|
||||
char* message;
|
||||
LinphoneChatRoom* chat_room;
|
||||
LinphoneChatMessageStateChangeCb cb;
|
||||
void* cb_ud;
|
||||
|
|
|
|||
|
|
@ -253,6 +253,12 @@ typedef enum SalSubscribeStatus{
|
|||
SalSubscribeTerminated
|
||||
}SalSubscribeStatus;
|
||||
|
||||
typedef enum SalTextDeliveryStatus{
|
||||
SalTextDeliveryInProgress,
|
||||
SalTextDeliveryDone,
|
||||
SalTextDeliveryFailed
|
||||
}SalTextDeliveryStatus;
|
||||
|
||||
typedef void (*SalOnCallReceived)(SalOp *op);
|
||||
typedef void (*SalOnCallRinging)(SalOp *op);
|
||||
typedef void (*SalOnCallAccepted)(SalOp *op);
|
||||
|
|
@ -269,6 +275,7 @@ typedef void (*SalOnVfuRequest)(SalOp *op);
|
|||
typedef void (*SalOnDtmfReceived)(SalOp *op, char dtmf);
|
||||
typedef void (*SalOnRefer)(Sal *sal, SalOp *op, const char *referto);
|
||||
typedef void (*SalOnTextReceived)(Sal *sal, const char *from, const char *msg);
|
||||
typedef void (*SalOnTextDeliveryUpdate)(SalOp *op, SalTextDeliveryStatus status);
|
||||
typedef void (*SalOnNotify)(SalOp *op, const char *from, const char *event);
|
||||
typedef void (*SalOnNotifyRefer)(SalOp *op, SalReferStatus state);
|
||||
typedef void (*SalOnNotifyPresence)(SalOp *op, SalSubscribeStatus ss, SalPresenceStatus status, const char *msg);
|
||||
|
|
@ -293,6 +300,7 @@ typedef struct SalCallbacks{
|
|||
SalOnDtmfReceived dtmf_received;
|
||||
SalOnRefer refer_received;
|
||||
SalOnTextReceived text_received;
|
||||
SalOnTextDeliveryUpdate text_delivery_update;
|
||||
SalOnNotify notify;
|
||||
SalOnNotifyPresence notify_presence;
|
||||
SalOnNotifyRefer notify_refer;
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#endif
|
||||
|
||||
#include "sal_eXosip2.h"
|
||||
#include "private.h"
|
||||
#include "offeranswer.h"
|
||||
|
||||
#ifdef ANDROID
|
||||
|
|
@ -98,12 +97,12 @@ static void sal_remove_register(Sal *sal, int rid){
|
|||
}
|
||||
}
|
||||
|
||||
static SalOp * sal_find_other(Sal *sal, osip_message_t *response){
|
||||
static SalOp * sal_find_other(Sal *sal, osip_message_t *message){
|
||||
const MSList *elem;
|
||||
SalOp *op;
|
||||
osip_call_id_t *callid=osip_message_get_call_id(response);
|
||||
osip_call_id_t *callid=osip_message_get_call_id(message);
|
||||
if (callid==NULL) {
|
||||
ms_error("There is no call-id in this response !");
|
||||
ms_error("There is no call-id in this message !");
|
||||
return NULL;
|
||||
}
|
||||
for(elem=sal->other_transactions;elem!=NULL;elem=elem->next){
|
||||
|
|
@ -931,9 +930,9 @@ void sal_op_authenticate(SalOp *h, const SalAuthInfo *info){
|
|||
}
|
||||
void sal_op_cancel_authentication(SalOp *h) {
|
||||
if (h->rid >0) {
|
||||
sal_op_get_sal(h)->callbacks.register_failure(h,SalErrorFailure, SalReasonForbidden,_("Authentication failure"));
|
||||
sal_op_get_sal(h)->callbacks.register_failure(h,SalErrorFailure, SalReasonForbidden,"Authentication failure");
|
||||
} else if (h->cid >0) {
|
||||
sal_op_get_sal(h)->callbacks.call_failure(h,SalErrorFailure, SalReasonForbidden,_("Authentication failure"),0);
|
||||
sal_op_get_sal(h)->callbacks.call_failure(h,SalErrorFailure, SalReasonForbidden,"Authentication failure",0);
|
||||
} else {
|
||||
ms_warning("Auth failure not handled");
|
||||
}
|
||||
|
|
@ -999,6 +998,7 @@ static SalOp *find_op(Sal *sal, eXosip_event_t *ev){
|
|||
return sal_find_in_subscribe(sal,ev->nid);
|
||||
}
|
||||
if (ev->response) return sal_find_other(sal,ev->response);
|
||||
else if (ev->request) return sal_find_other(sal,ev->request);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
@ -1953,7 +1953,6 @@ static bool_t registration_failure(Sal *sal, eXosip_event_t *ev){
|
|||
|
||||
static void other_request_reply(Sal *sal,eXosip_event_t *ev){
|
||||
SalOp *op=find_op(sal,ev);
|
||||
LinphoneChatMessage* chat_msg;
|
||||
if (op==NULL){
|
||||
ms_warning("other_request_reply(): Receiving response to unknown request.");
|
||||
return;
|
||||
|
|
@ -1963,16 +1962,18 @@ static void other_request_reply(Sal *sal,eXosip_event_t *ev){
|
|||
update_contact_from_response(op,ev->response);
|
||||
if (ev->request && strcmp(osip_message_get_method(ev->request),"OPTIONS")==0)
|
||||
sal->callbacks.ping_reply(op);
|
||||
else if (ev->request && strcmp(osip_message_get_method(ev->request),"MESSAGE")==0) {
|
||||
/*out of call message acknolegment*/
|
||||
chat_msg=(LinphoneChatMessage* )op->base.user_pointer;
|
||||
if (chat_msg->cb) {
|
||||
chat_msg->cb(chat_msg
|
||||
,(ev->response->status_code==200?LinphoneChatMessageStateDelivered:LinphoneChatMessageStateNotDelivered)
|
||||
,chat_msg->cb_ud);
|
||||
}
|
||||
if (ev->request && strcmp(osip_message_get_method(ev->request),"MESSAGE")==0) {
|
||||
/*out of call message acknolegment*/
|
||||
SalTextDeliveryStatus status=SalTextDeliveryFailed;
|
||||
if (ev->response){
|
||||
if (ev->response->status_code<200){
|
||||
status=SalTextDeliveryInProgress;
|
||||
}else if (ev->response->status_code<300 && ev->response->status_code>=200){
|
||||
status=SalTextDeliveryDone;
|
||||
}
|
||||
linphone_chat_message_destroy(chat_msg);
|
||||
}
|
||||
sal->callbacks.text_delivery_update(op,status);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2081,8 +2082,8 @@ static bool_t process_event(Sal *sal, eXosip_event_t *ev){
|
|||
if (ev->response && (ev->response->status_code == 407 || ev->response->status_code == 401)){
|
||||
return process_authentication(sal,ev);
|
||||
}
|
||||
case EXOSIP_SUBSCRIPTION_SERVERFAILURE:
|
||||
case EXOSIP_SUBSCRIPTION_GLOBALFAILURE:
|
||||
case EXOSIP_SUBSCRIPTION_SERVERFAILURE:
|
||||
case EXOSIP_SUBSCRIPTION_GLOBALFAILURE:
|
||||
sal_exosip_subscription_closed(sal,ev);
|
||||
break;
|
||||
case EXOSIP_REGISTRATION_FAILURE:
|
||||
|
|
|
|||
|
|
@ -90,6 +90,10 @@ const char* linphone_gtk_get_used_identity(){
|
|||
else return linphone_core_get_primary_contact(lc);
|
||||
}
|
||||
|
||||
static void on_chat_state_changed(LinphoneChatMessage *msg, LinphoneChatMessageState state, void *user_pointer){
|
||||
g_message("chat message state is %s",linphone_chat_message_state_to_string(state));
|
||||
}
|
||||
|
||||
void linphone_gtk_send_text(GtkWidget *button){
|
||||
GtkWidget *w=gtk_widget_get_toplevel(button);
|
||||
GtkWidget *entry=linphone_gtk_get_widget(w,"text_entry");
|
||||
|
|
@ -97,10 +101,12 @@ void linphone_gtk_send_text(GtkWidget *button){
|
|||
const gchar *entered;
|
||||
entered=gtk_entry_get_text(GTK_ENTRY(entry));
|
||||
if (strlen(entered)>0) {
|
||||
LinphoneChatMessage *msg;
|
||||
linphone_gtk_push_text(GTK_TEXT_VIEW(linphone_gtk_get_widget(w,"textlog")),
|
||||
linphone_gtk_get_used_identity(),
|
||||
entered,TRUE);
|
||||
linphone_chat_room_send_message(cr,entered);
|
||||
msg=linphone_chat_room_create_message(cr,entered);
|
||||
linphone_chat_room_send_message2(cr,msg,on_chat_state_changed,NULL);
|
||||
gtk_entry_set_text(GTK_ENTRY(entry),"");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue