func (self *serverConn) writeDigest(mc *rpc.MessageContainer, extra map[string]string, sz int) error { digest := &proto.Command{ Type: proto.CMD_DIGEST, } params := [4]string{fmt.Sprintf("%v", sz), mc.Id} if mc.FromUser() { params[2] = mc.Sender params[3] = mc.SenderService digest.Params = params[:4] } else { digest.Params = params[:2] } msg := mc.Message header := make(map[string]string, len(extra)+len(msg.Header)) self.digestFielsLock.Lock() defer self.digestFielsLock.Unlock() for _, f := range self.digestFields { if len(msg.Header) > 0 { if v, ok := msg.Header[f]; ok { header[f] = v } } if len(extra) > 0 { if v, ok := extra[f]; ok { header[f] = v } } } if len(header) > 0 { digest.Message = &rpc.Message{ Header: header, } } compress := self.shouldCompress(digest.Message.Size()) return self.cmdio.WriteCommand(digest, compress) }