func (this *SIPResponse) CreateRequest(requestURI address.SipURI, via *header.Via, cseq *header.CSeq) *SIPRequest { newRequest := NewSIPRequest() method := cseq.GetMethod() newRequest.SetMethod(method) newRequest.SetRequestURI(requestURI) if (method == "ACK" || method == "CANCEL") && this.GetTopmostVia().GetBranch() != "" { // Use the branch id from the OK. //try { via.SetBranch(this.GetTopmostVia().GetBranch()) //} catch (ParseException ex) {} } newRequest.SetHeader(via) newRequest.SetHeader(cseq) for headerIterator := this.getHeaders().Front(); headerIterator != nil; headerIterator = headerIterator.Next() { nextHeader := headerIterator.Value.(header.Header) // Some headers do not belong in a Request .... if this.IsResponseHeader(nextHeader) { continue } if _, ok := nextHeader.(*header.ViaList); ok { continue } if _, ok := nextHeader.(*header.CSeq); ok { continue } if _, ok := nextHeader.(*header.ContentType); ok { continue } if _, ok := nextHeader.(*header.RecordRouteList); ok { continue } // if _, ok:=nextHeader.(*header.To); ok{ // nextHeader = nextHeader.clone(); // } // else if (nextHeader instanceof From) // nextHeader = (SIPHeader)nextHeader.clone(); // try { newRequest.AttachHeader2(nextHeader, false) // } catch(SIPDuplicateHeaderException e){ // e.printStackTrace(); // } } return newRequest }