int sal_unsubscribe(SalOp *op){ osip_message_t *msg=NULL; if (op->did==-1){ ms_error("cannot unsubscribe, no dialog !"); return -1; } eXosip_lock(); eXosip_subscribe_build_refresh_request(op->did,&msg); if (msg){ osip_message_set_expires(msg,"0"); eXosip_subscribe_send_refresh_request(op->did,msg); }else ms_error("Could not build subscribe refresh request ! op->sid=%i, op->did=%i", op->sid,op->did); eXosip_unlock(); return 0; }
int _eXosip_subscribe_automatic_refresh (struct eXosip_t *excontext, eXosip_subscribe_t * js, eXosip_dialog_t * jd, osip_transaction_t * out_tr) { osip_message_t *sub = NULL; osip_header_t *expires; int i; if (js == NULL || jd == NULL || out_tr == NULL || out_tr->orig_request == NULL) return OSIP_BADPARAMETER; i = eXosip_subscribe_build_refresh_request (excontext, jd->d_id, &sub); if (i != 0) return i; i = osip_message_get_expires (out_tr->orig_request, 0, &expires); if (expires != NULL && expires->hvalue != NULL) { osip_message_set_expires (sub, expires->hvalue); } { int pos = 0; osip_accept_t *_accept = NULL; i = osip_message_get_accept (out_tr->orig_request, pos, &_accept); while (i >= 0 && _accept != NULL) { osip_accept_t *_accept2; i = osip_accept_clone (_accept, &_accept2); if (i != 0) { OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_ERROR, NULL, "Error in Accept header\n")); break; } osip_list_add (&sub->accepts, _accept2, -1); _accept = NULL; pos++; i = osip_message_get_accept (out_tr->orig_request, pos, &_accept); } } { int pos = 0; osip_header_t *_event = NULL; pos = osip_message_header_get_byname (out_tr->orig_request, "Event", 0, &_event); while (pos >= 0 && _event != NULL) { osip_header_t *_event2; i = osip_header_clone (_event, &_event2); if (i != 0) { OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_ERROR, NULL, "Error in Event header\n")); break; } osip_list_add (&sub->headers, _event2, -1); _event = NULL; pos++; pos = osip_message_header_get_byname (out_tr->orig_request, "Event", pos, &_event); } } i = eXosip_subscribe_send_refresh_request (excontext, jd->d_id, sub); return i; }