Example #1
0
static void on_publish_response(SalOp* op, SalError err, SalReason reason){
	LinphoneEvent *lev=(LinphoneEvent*)sal_op_get_user_pointer(op);
	
	if (lev==NULL) return;
	if (err==SalErrorNone){
		if (!lev->terminating)
			linphone_event_set_publish_state(lev,LinphonePublishOk);
		else 
			linphone_event_set_publish_state(lev,LinphonePublishCleared);
		
	}else{
		linphone_event_set_reason(lev,linphone_reason_from_sal(reason));
		linphone_event_set_publish_state(lev,LinphonePublishError);
	}
}
Example #2
0
int linphone_event_update_publish(LinphoneEvent *lev, const LinphoneContent *body){
	SalBody salbody;
	int err;
	
	if (lev->publish_state==LinphonePublishNone){
		ms_error("linphone_event_update_publish(): this is not a PUBLISH event.");
		return -1;
	}
	
	err=sal_publish(lev->op,NULL,NULL,NULL,-1,sal_body_from_content(&salbody,body));
	if (err==0){
		linphone_event_set_publish_state(lev,LinphonePublishProgress);
	}else{
		linphone_event_set_publish_state(lev,LinphonePublishError);
	}
	return err;
}
Example #3
0
static void on_expire(SalOp *op){
	LinphoneEvent *lev=(LinphoneEvent*)sal_op_get_user_pointer(op);
	
	if (lev==NULL) return;
	
	if (linphone_event_get_publish_state(lev)==LinphonePublishOk){
		linphone_event_set_publish_state(lev,LinphonePublishExpiring);
	}else if (linphone_event_get_subscription_state(lev)==LinphoneSubscriptionActive){
		linphone_event_set_state(lev,LinphoneSubscriptionExpiring);
	}
}
Example #4
0
static int _linphone_event_send_publish(LinphoneEvent *lev, const LinphoneContent *body, bool_t notify_err){
	SalBody salbody;
	int err;

	if (lev->dir!=LinphoneSubscriptionInvalidDir){
		ms_error("linphone_event_update_publish(): this is not a PUBLISH event.");
		return -1;
	}
	if (lev->send_custom_headers){
		sal_op_set_sent_custom_header(lev->op,lev->send_custom_headers);
		lev->send_custom_headers=NULL;
	}else sal_op_set_sent_custom_header(lev->op,NULL);
	err=sal_publish(lev->op,NULL,NULL,lev->name,lev->expires,sal_body_from_content(&salbody,body));
	if (err==0){
		linphone_event_set_publish_state(lev,LinphonePublishProgress);
	}else if (notify_err){
		linphone_event_set_publish_state(lev,LinphonePublishError);
	}
	return err;
}
Example #5
0
LinphoneEvent *linphone_core_publish(LinphoneCore *lc, const LinphoneAddress *resource, const char *event, int expires, const LinphoneContent *body){
	SalBody salbody;
	int err;
	LinphoneEvent *lev=linphone_event_new(lc,LinphoneSubscriptionInvalidDir, event);
	linphone_configure_op(lc,lev->op,resource,NULL,lp_config_get_int(lc->config,"sip","publish_msg_with_contact",0));
	sal_op_set_manual_refresher_mode(lev->op,!lp_config_get_int(lc->config,"sip","refresh_generic_publish",1));
	err=sal_publish(lev->op,NULL,NULL,event,expires,sal_body_from_content(&salbody,body));
	if (err==0){
		linphone_event_set_publish_state(lev,LinphonePublishProgress);
	}else{
		linphone_event_unref(lev);
		lev=NULL;
	}
	return lev;
}
Example #6
0
void linphone_event_terminate(LinphoneEvent *lev){
	lev->terminating=TRUE;
	if (lev->dir==LinphoneSubscriptionIncoming){
		sal_notify_close(lev->op);
	}else if (lev->dir==LinphoneSubscriptionOutgoing){
		sal_unsubscribe(lev->op);
	}

	if (lev->publish_state!=LinphonePublishNone){
		if (lev->publish_state==LinphonePublishOk && lev->expires!=-1){
			sal_publish(lev->op,NULL,NULL,NULL,0,NULL);
		}else sal_op_stop_refreshing(lev->op);
		linphone_event_set_publish_state(lev,LinphonePublishCleared);
		return;
	}

	if (lev->subscription_state!=LinphoneSubscriptionNone){
		linphone_event_set_state(lev,LinphoneSubscriptionTerminated);
		return;
	}
}