return LinphoneChatMessageStateIdle;
}
+static int op_equals(LinphoneCall *a, SalOp *b) {
+ return a->op !=b; /*return 0 if equals*/
+}
static void text_delivery_update(SalOp *op, SalTextDeliveryStatus status){
LinphoneChatMessage *chat_msg=(LinphoneChatMessage* )sal_op_get_user_pointer(op);
+ const MSList* calls = linphone_core_get_calls(chat_msg->chat_room->lc);
+
if (chat_msg && chat_msg->cb) {
chat_msg->cb(chat_msg
,chatStatusSal2Linphone(status)
,chat_msg->cb_ud);
}
linphone_chat_message_destroy(chat_msg);
+
+ if (!ms_list_find_custom((MSList*)calls, (MSCompareFunc) op_equals, op)) {
+ /*op was only create for messaging purpose, destroying*/
+ sal_op_release(op);
+ }
}
SalCallbacks linphone_sal_callbacks={
lc->chatrooms=ms_list_remove(lc->chatrooms,(void *) cr);
linphone_address_destroy(cr->peer_url);
ms_free(cr->peer);
- if (cr->op)
- sal_op_release(cr->op);
}
/*sending out of calls*/
op = sal_op_new(cr->lc->sal);
sal_op_set_route(op,route);
- if (cr->op!=NULL){
- sal_op_release (cr->op);
- cr->op=NULL;
- }
- cr->op=op;
sal_op_set_user_pointer(op, msg); /*if out of call, directly store msg*/
}
if (msg->external_body_url) {