|  | @@ -186,10 +186,9 @@ func ReadSegment(buf []byte) (Segment, []byte) {
 | 
	
		
			
				|  |  |  	buf = buf[2:]
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if cmd == SegmentCommandData {
 | 
	
		
			
				|  |  | -		seg := &DataSegment{
 | 
	
		
			
				|  |  | -			Conv: conv,
 | 
	
		
			
				|  |  | -			Opt:  opt,
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | +		seg := NewDataSegment()
 | 
	
		
			
				|  |  | +		seg.Conv = conv
 | 
	
		
			
				|  |  | +		seg.Opt = opt
 | 
	
		
			
				|  |  |  		if len(buf) < 16 {
 | 
	
		
			
				|  |  |  			return nil, nil
 | 
	
		
			
				|  |  |  		}
 | 
	
	
		
			
				|  | @@ -215,10 +214,9 @@ func ReadSegment(buf []byte) (Segment, []byte) {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if cmd == SegmentCommandACK {
 | 
	
		
			
				|  |  | -		seg := &AckSegment{
 | 
	
		
			
				|  |  | -			Conv: conv,
 | 
	
		
			
				|  |  | -			Opt:  opt,
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | +		seg := NewAckSegment()
 | 
	
		
			
				|  |  | +		seg.Conv = conv
 | 
	
		
			
				|  |  | +		seg.Opt = opt
 | 
	
		
			
				|  |  |  		if len(buf) < 9 {
 | 
	
		
			
				|  |  |  			return nil, nil
 | 
	
		
			
				|  |  |  		}
 | 
	
	
		
			
				|  | @@ -247,11 +245,10 @@ func ReadSegment(buf []byte) (Segment, []byte) {
 | 
	
		
			
				|  |  |  		return seg, buf
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	seg := &CmdOnlySegment{
 | 
	
		
			
				|  |  | -		Conv: conv,
 | 
	
		
			
				|  |  | -		Cmd:  cmd,
 | 
	
		
			
				|  |  | -		Opt:  opt,
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | +	seg := NewCmdOnlySegment()
 | 
	
		
			
				|  |  | +	seg.Conv = conv
 | 
	
		
			
				|  |  | +	seg.Cmd = cmd
 | 
	
		
			
				|  |  | +	seg.Opt = opt
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if len(buf) < 8 {
 | 
	
		
			
				|  |  |  		return nil, nil
 |