int eXosip_register_send_register (int rid, osip_message_t * reg) { osip_transaction_t *transaction; osip_event_t *sipevent; eXosip_reg_t *jr; int i; jr = eXosip_reg_find (rid); if (jr == NULL) { osip_message_free (reg); return -1; } if (jr->r_last_tr != NULL) { if (jr->r_last_tr->state != NICT_TERMINATED && jr->r_last_tr->state != NICT_COMPLETED) { osip_message_free (reg); return -1; } } if (reg == NULL) { i = _eXosip_register_build_register (jr, ®); if (i != 0) { OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_ERROR, NULL, "eXosip: cannot build REGISTER!")); return i; } } i = _eXosip_transaction_init (&transaction, NICT, eXosip.j_osip, reg); if (i != 0) { /* TODO: release the j_call.. */ osip_message_free (reg); return -2; } jr->r_last_tr = transaction; /* send REGISTER */ sipevent = osip_new_outgoing_sipmessage (reg); sipevent->transactionid = transaction->transactionid; osip_message_force_update (reg); osip_transaction_add_event (transaction, sipevent); __eXosip_wakeup (); return 0; }
int eXosip_register_remove (int rid) { eXosip_reg_t *jr; jr = eXosip_reg_find (rid); if (jr == NULL) { /* fprintf(stderr, "eXosip: no registration info saved!\n"); */ return -1; } jr->r_reg_period = 0; REMOVE_ELEMENT (eXosip.j_reg, jr); eXosip_reg_free (jr); jr=NULL; return 0; }
int eXosip_register_remove(int rid) { eXosip_reg_t *jr; if (rid <= 0) return OSIP_BADPARAMETER; jr = eXosip_reg_find(rid); if (jr == NULL) return OSIP_NOTFOUND; jr->r_reg_period = 0; REMOVE_ELEMENT(eXosip.j_reg, jr); eXosip_reg_free(jr); jr = NULL; return OSIP_SUCCESS; }
int eXosip_register_build_register (int rid, int expires, osip_message_t ** reg) { eXosip_reg_t *jr; int i; *reg = NULL; jr = eXosip_reg_find (rid); if (jr == NULL) { /* fprintf(stderr, "eXosip: no registration info saved!\n"); */ return -1; } jr->r_reg_period = expires; if (jr->r_reg_period == 0) { } /* unregistration */ else if (jr->r_reg_period > 3600) jr->r_reg_period = 3600; else if (jr->r_reg_period < 100) /* too low */ jr->r_reg_period = 100; if (jr->r_last_tr != NULL) { if (jr->r_last_tr->state != NICT_TERMINATED && jr->r_last_tr->state != NICT_COMPLETED) { /* fprintf(stderr, "eXosip: a registration is already pending!\n"); */ return -1; } } i = _eXosip_register_build_register (jr, reg); if (i != 0) { OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_ERROR, NULL, "eXosip: cannot build REGISTER!")); *reg = NULL; return i; } return 0; }
int eXosip_register_build_register (int rid, int expires, osip_message_t ** reg) { eXosip_reg_t *jr; int i; *reg = NULL; if (rid <= 0) return OSIP_BADPARAMETER; jr = eXosip_reg_find (rid); if (jr == NULL) return OSIP_NOTFOUND; jr->r_reg_period = expires; if (jr->r_reg_period == 0) { } /* unregistration */ else if (jr->r_reg_period > 3600) jr->r_reg_period = 3600; else if (jr->r_reg_period < 100) /* too low */ jr->r_reg_period = 100; if (jr->r_last_tr != NULL) { if (jr->r_last_tr->state != NICT_TERMINATED && jr->r_last_tr->state != NICT_COMPLETED) { return OSIP_WRONG_STATE; } } i = _eXosip_register_build_register (jr, reg); if (i != 0) { OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_ERROR, NULL, "eXosip: cannot build REGISTER!")); *reg = NULL; return i; } return OSIP_SUCCESS; }