rem: c.s = cp + sizeof(c.len); cp += sizeof(c.len) + c.len;
add: c.s = (char*)cp + sizeof(c.len); cp =  (char*)cp + sizeof(c.len) + c.len;
context: timer(unsigned int ticks, void *param){	int rval;	void *buf, *cp;	str c;	struct sip_uri curi;	union sockaddr_union to;	struct hostent* he;	struct socket_info* send_sock;	buf = NULL;	if (cblen > 0) {		buf = pkg_malloc(cblen);		if (buf == NULL) {			LOG(L_ERR, "ERROR: nathelper::timer: out of memory\n");			return;		}	}	rval = get_all_ucontacts(buf, cblen);	if (rval > 0) {		if (buf != NULL)			pkg_free(buf);		cblen = rval * 2;		buf = pkg_malloc(cblen);		if (buf == NULL) {			LOG(L_ERR, "ERROR: nathelper::timer: out of memory\n");			return;		}		rval = get_all_ucontacts(buf, cblen);		if (rval != 0) {			pkg_free(buf);			return;		}	}	if (buf == NULL)		return;	cp = buf;	while (1) {		memcpy(&(c.len), cp, sizeof(c.len));		if (c.len == 0)			break;		c.s = cp + sizeof(c.len);		cp += sizeof(c.len) + c.len;		if (parse_uri(c.s, c.len, &curi) < 0) {			LOG(L_ERR, "ERROR: nathelper::timer: can't parse contact uri\n");			continue;		}		if (curi.proto != PROTO_UDP)			continue;		if (curi.port_no == 0)			curi.port_no = SIP_PORT;		he = sip_resolvehost(&curi.host, &curi.port_no, curi.proto);		if (he == NULL){			LOG(L_ERR, "ERROR: nathelper::timer: can't resolve_hos\n");			continue;		}		hostent2su(&to, he, 0, htons(curi.port_no));		send_sock = get_send_socket(&to, curi.proto);		if (send_sock == NULL) {			LOG(L_ERR, "ERROR: nathelper::timer: can't get sending socket\n");			continue;		}		udp_send(send_sock, (char *)sbuf, sizeof(sbuf), &to);	}	pkg_free(buf);}