add: src[0].s = "Long live SER server"; src[0].len = strlen(src[0].s); src[1].s = sock_info[bind_idx].address_str.s; src[1].len = strlen(src[1].s); src[2].s = sock_info[bind_idx].port_no_str.s; src[2].len = strlen(src[2].s);
context: int uac_init() {	int i; 	unsigned long uli;	int rand_len_bits;	int rand_cnt; /* number of rands() to be long enough */	int rand_bits; /* length of rands() in bits */	str src[3];	if (RAND_MAX<TABLE_ENTRIES) {		LOG(L_WARN, "Warning: uac does not spread "			"accross the whole hash table\n");	}	/* calculate the initial call-id */	/* how many bits and chars do we need to display the 	 * whole ULONG number */	for (rand_len_bits=0,uli=ULONG_MAX;uli;			uli>>=1, rand_len_bits++ );	rand_len=rand_len_bits/4;	if (rand_len>CALLID_NR_LEN) {		LOG(L_ERR, "ERROR: Too small callid buffer\n");		return -1;	}	/* how long are the rand()s ? */	for (rand_bits=0,i=RAND_MAX;i;i>>=1,rand_bits++);	/* how many rands() fit in the ULONG ? */	rand_cnt=rand_len_bits / rand_bits;	/* now fill in the callid with as many random	 * numbers as you can + 1 */	callid_nr=rand(); /* this is the + 1 */	while(rand_cnt) {		rand_cnt--;		callid_nr<<=rand_bits;		callid_nr|=rand();	}	callid_suffix=callid+rand_len;	DBG("CALLID initialization: %lx (len=%d)\n", 			callid_nr, rand_len );	DBG("CALLID0=%0*lx\n", rand_len, callid_nr );	/* calculate the initial From tag */	src[0].s="Long live SER server";	src[0].len=strlen(src[0].s);	src[1].s=sock_info[bind_idx].address_str.s;	src[1].len=strlen(src[1].s);	src[2].s=sock_info[bind_idx].port_no_str.s;	src[2].len=strlen(src[2].s);	MDStringArray( from_tag, src, 3 );	from_tag[MD5_LEN]=CID_SEP;	return 1;}