rem: if (uri.proto != PROTO_UDP && uri.proto != PROTO_NONE)
add: if (uri.proto!=PROTO_TCP && uri.proto!=PROTO_UDP && uri.proto!=PROTO_NONE)
context: FixContact(struct sip_msg* msg, char* str1, char* str2){    str beforeHost, after, agent;    contact_t* contact;    struct lump* anchor;    struct sip_uri uri;    char *newip, *buf;    int len, newiplen, offset;    Bool asymmetric;    if (!getContactURI(msg, &uri, &contact))        return -1;    if (uri.proto != PROTO_UDP && uri.proto != PROTO_NONE)        return -1;    newip = ip_addr2a(&msg->rcv.src_ip);    newiplen = strlen(newip);    /* Don't do anything if the IP's are the same. Return success. */    if (newiplen==uri.host.len && memcmp(uri.host.s, newip, newiplen)==0) {        return 1;    }    if (uri.port.len == 0)        uri.port.s = uri.host.s + uri.host.len;    agent = getUserAgent(msg);    asymmetric = isSIPAsymmetric(agent);    beforeHost.s   = contact->uri.s;    beforeHost.len = uri.host.s - contact->uri.s;    if (asymmetric) {        // for asymmetrics we preserve the original port        after.s   = uri.port.s;        after.len = contact->uri.s + contact->uri.len - after.s;    } else {        after.s   = uri.port.s + uri.port.len;        after.len = contact->uri.s + contact->uri.len - after.s;    }    len = beforeHost.len + newiplen + after.len + 20;    // first try to alloc mem. if we fail we don't want to have the lump    // deleted and not replaced. at least this way we keep the original.    buf = pkg_malloc(len);    if (buf == NULL) {        LOG(L_ERR, "error: fix_contact(): out of memory\n");        return -1;    }    offset = contact->uri.s - msg->buf;    anchor = del_lump(msg, offset, contact->uri.len, HDR_CONTACT_F);    if (!anchor) {        pkg_free(buf);        return -1;    }    if (asymmetric && uri.port.len==0) {        len = sprintf(buf, "%.*s%s%.*s", beforeHost.len, beforeHost.s,                      newip, after.len, after.s);    } else if (asymmetric) {        len = sprintf(buf, "%.*s%s:%.*s", beforeHost.len, beforeHost.s,                      newip, after.len, after.s);    } else {        len = sprintf(buf, "%.*s%s:%d%.*s", beforeHost.len, beforeHost.s,                      newip, msg->rcv.src_port, after.len, after.s);    }    if (insert_new_lump_after(anchor, buf, len, HDR_CONTACT_F) == 0) {        pkg_free(buf);        return -1;    }    contact->uri.s   = buf;    contact->uri.len = len;    if (asymmetric) {        LOG(L_INFO, "info: fix_contact(): preserved port for SIP "            "asymmetric client: `%.*s'\n", agent.len, agent.s);    }    return 1;}