int eXosip_call_build_update (int did, osip_message_t ** request) { int i; *request = NULL; i = eXosip_call_build_request (did, "UPDATE", request); if (i != 0) return i; return OSIP_SUCCESS; }
int eXosip_call_build_info (int did, osip_message_t ** request) { int i; *request = NULL; i = eXosip_call_build_request (did, "INFO", request); if (i != 0) return i; return OSIP_SUCCESS; }
int eXosip_call_build_options (int did, osip_message_t ** request) { int i; *request = NULL; i = eXosip_call_build_request (did, "OPTIONS", request); if (i != 0) return i; return OSIP_SUCCESS; }
int sal_message_send(SalOp *op, const char *from, const char *to, const char* content_type, const char *msg){ osip_message_t *sip=NULL; if(op->cid == -1) { /* we are not currently in communication with the destination */ if (from) sal_op_set_from(op,from); if (to) sal_op_set_to(op,to); sal_exosip_fix_route(op); eXosip_lock(); eXosip_message_build_request(&sip,"MESSAGE",sal_op_get_to(op), sal_op_get_from(op),sal_op_get_route(op)); if (sip!=NULL){ sal_exosip_add_custom_headers(sip,op->base.custom_headers); msg_add_current_date(sip); osip_message_set_content_type(sip,content_type); if (msg) osip_message_set_body(sip,msg,strlen(msg)); sal_add_other(op->base.root,op,sip); eXosip_message_send_request(sip); }else{ ms_error("Could not build MESSAGE request !"); } eXosip_unlock(); } else { /* we are currently in communication with the destination */ eXosip_lock(); //First we generate an INFO message to get the current call_id and a good cseq eXosip_call_build_request(op->did,"MESSAGE",&sip); if(sip == NULL) { ms_warning("could not get a build info to send MESSAGE, maybe no previous call established ?"); eXosip_unlock(); return -1; } sal_exosip_add_custom_headers(sip,op->base.custom_headers); msg_add_current_date(sip); osip_message_set_content_type(sip,content_type); if (msg) osip_message_set_body(sip,msg,strlen(msg)); eXosip_call_send_request(op->did,sip); eXosip_unlock(); } return 0; }
int eXosip_call_build_refer (int did, const char *refer_to, osip_message_t ** request) { int i; *request = NULL; i = eXosip_call_build_request (did, "REFER", request); if (i != 0) return i; if (refer_to == NULL || refer_to[0] == '\0') return OSIP_SUCCESS; osip_message_set_header (*request, "Refer-to", refer_to); return OSIP_SUCCESS; }
int uac_send_message(const sessionId Id, const alter_message * alter_m) { osip_message_t *message; int i; eXosip_lock (); i = eXosip_call_build_request (Id.did,alter_m->method_type/*"MESSAGE" or "INFO"*/, &message); if (i == 0) { if(alter_m->content_type!=NULL) osip_message_set_content_type (message, alter_m->content_type/*"Application/MANSRTSP"*/); if(alter_m->subject!=NULL) osip_message_set_subject(message,alter_m->subject); osip_message_set_body (message, alter_m->body, strlen (alter_m->body)); i = eXosip_call_send_request (Id.did, message); } eXosip_unlock (); return i; }
int eXosip_call_build_notify (int did, int subscription_status, osip_message_t ** request) { char subscription_state[50]; char *tmp; int i; *request = NULL; i = eXosip_call_build_request (did, "NOTIFY", request); if (i != 0) return i; if (subscription_status == EXOSIP_SUBCRSTATE_PENDING) osip_strncpy (subscription_state, "pending;expires=", 16); else if (subscription_status == EXOSIP_SUBCRSTATE_ACTIVE) osip_strncpy (subscription_state, "active;expires=", 15); else if (subscription_status == EXOSIP_SUBCRSTATE_TERMINATED) { int reason = NORESOURCE; if (reason == DEACTIVATED) osip_strncpy (subscription_state, "terminated;reason=deactivated", 29); else if (reason == PROBATION) osip_strncpy (subscription_state, "terminated;reason=probation", 27); else if (reason == REJECTED) osip_strncpy (subscription_state, "terminated;reason=rejected", 26); else if (reason == TIMEOUT) osip_strncpy (subscription_state, "terminated;reason=timeout", 25); else if (reason == GIVEUP) osip_strncpy (subscription_state, "terminated;reason=giveup", 24); else if (reason == NORESOURCE) osip_strncpy (subscription_state, "terminated;reason=noresource", 29); } tmp = subscription_state + strlen (subscription_state); if (subscription_status != EXOSIP_SUBCRSTATE_TERMINATED) sprintf (tmp, "%i", 180); osip_message_set_header (*request, "Subscription-State", subscription_state); return OSIP_SUCCESS; }