コード例 #1
0
ファイル: SIPResponse.go プロジェクト: hinike/gosips
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
}