/**
 * init a JABBER connection
 */
xj_jcon xj_jcon_init(char *hostname, int port)
{
	xj_jcon jbc = NULL;
	if(hostname==NULL || strlen(hostname)<=0)
		return NULL;
	
	jbc = (xj_jcon)_M_MALLOC(sizeof(struct _xj_jcon));
	if(jbc == NULL)
		return NULL;
	jbc->sock=-1;
    jbc->port = port;
    jbc->juid = -1;
	jbc->seq_nr = 0;
    jbc->hostname = (char*)_M_MALLOC(strlen(hostname)+1);
	if(jbc->hostname == NULL)
	{
		_M_FREE(jbc);
		return NULL;
	}
    strcpy(jbc->hostname, hostname);
	jbc->allowed = jbc->ready = XJ_NET_NUL;
	jbc->jconf = NULL;
	jbc->nrjconf = 0;
	jbc->plist = xj_pres_list_init();
	if(jbc->plist == NULL)
	{
		_M_FREE(jbc->hostname);
		_M_FREE(jbc);
		return NULL;
	}
			
    return jbc;
}
Beispiel #2
0
/**
 * free a Jabber connections pool structure
 * - jcp : pointer to the Jabber connections pool structure
 */
void xj_jcon_pool_free(xj_jcon_pool jcp)
{
	int i;
	if(jcp == NULL)
		return;
#ifdef XJ_EXTRA_DEBUG
	LM_DBG("-----START-----\n");
#endif
	if(jcp->ojc != NULL)
	{
		for(i=0; i<jcp->len; i++)
		{
			if(jcp->ojc[i] != NULL)
				xj_jcon_free(jcp->ojc[i]);
		}
		_M_FREE(jcp->ojc);
	}
	if(jcp->jmqueue.jsm != NULL)
		_M_FREE(jcp->jmqueue.jsm);
	if(jcp->jmqueue.ojc != NULL)
		_M_FREE(jcp->jmqueue.ojc);
	if(jcp->jmqueue.expire != NULL)
		_M_FREE(jcp->jmqueue.expire);
		
	_M_FREE(jcp);
}
Beispiel #3
0
/**
 * init a jc_pool structure
 * - size : maximum number of the open connection to Jabber
 * - jlen : maximum size of messages queue
 * return : pointer to the structure or NULL on error
 */
xj_jcon_pool xj_jcon_pool_init(int size, int jlen, int ch)
{
	xj_jcon_pool jcp = (xj_jcon_pool)_M_MALLOC(sizeof(t_xj_jcon_pool));
	if(jcp == NULL)
		return NULL;
	jcp->len = size;
	jcp->ojc = (xj_jcon*)_M_MALLOC(size*sizeof(xj_jcon));
	if(jcp->ojc == NULL)
	{
		_M_FREE(jcp);
		return NULL;
	}
	memset( jcp->ojc , 0, size*sizeof(xj_jcon) );
	jcp->jmqueue.len = jlen;
	jcp->jmqueue.size = 0;
	jcp->jmqueue.cache = (ch>0)?ch:90;
	jcp->jmqueue.expire = (int*)_M_MALLOC(jlen*sizeof(int));
	if(jcp->jmqueue.expire == NULL)
	{
		_M_FREE(jcp->ojc);
		_M_FREE(jcp);
		return NULL;
	}
	jcp->jmqueue.jsm=(xj_sipmsg*)_M_MALLOC(jlen*sizeof(xj_sipmsg));
	if(jcp->jmqueue.jsm == NULL)
	{
		_M_FREE(jcp->jmqueue.expire);
		_M_FREE(jcp->ojc);
		_M_FREE(jcp);
		return NULL;
	}
	jcp->jmqueue.ojc = (xj_jcon*)_M_MALLOC(jlen*sizeof(xj_jcon));
	if(jcp->jmqueue.ojc == NULL)
	{
		_M_FREE(jcp->jmqueue.expire);
		_M_FREE(jcp->jmqueue.jsm);
		_M_FREE(jcp->ojc);
		_M_FREE(jcp);
		return NULL;
	}
	memset( jcp->jmqueue.expire , 0, jlen*sizeof(int) );
	memset( jcp->jmqueue.jsm , 0, jlen*sizeof(xj_sipmsg) );
	memset( jcp->jmqueue.ojc , 0, jlen*sizeof(xj_jcon) );
	return jcp;
}
/**
 * free the allocated memory space of a JABBER connection
 */
int xj_jcon_free(xj_jcon jbc)
{
	xj_jconf jcf;
	
	if(jbc == NULL)
		return -1;

#ifdef XJ_EXTRA_DEBUG
	DBG("XJAB:xj_jcon_free: -----START-----\n");
#endif
	//if(jbc->sock != -1)
	//	jb_disconnect(jbc);

	if(jbc->hostname != NULL)
		_M_FREE(jbc->hostname);
	if(jbc->stream_id != NULL)
		_M_FREE(jbc->stream_id);
	
	if(jbc->resource != NULL)
		_M_FREE(jbc->resource);
#ifdef XJ_EXTRA_DEBUG
	DBG("XJAB:xj_jcon_free: %d conferences\n", jbc->nrjconf);
#endif
	while(jbc->nrjconf > 0)
	{
		if((jcf=delpos234(jbc->jconf,0))!=NULL)
			xj_jconf_free(jcf);
		jbc->nrjconf--;
	}
	xj_pres_list_free(jbc->plist);
	_M_FREE(jbc);
#ifdef XJ_EXTRA_DEBUG
	DBG("XJAB:xj_jcon_free: -----END-----\n");
#endif
	return 0;
}