示例#1
0
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, &reg);
        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;
}
示例#2
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;
}
示例#3
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;
}
示例#4
0
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;
}