本文整理汇总了Golang中net/textproto.MIMEHeader.Get方法的典型用法代码示例。如果您正苦于以下问题:Golang MIMEHeader.Get方法的具体用法?Golang MIMEHeader.Get怎么用?Golang MIMEHeader.Get使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类net/textproto.MIMEHeader
的用法示例。
在下文中一共展示了MIMEHeader.Get方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: mediaTypeOrDefault
func mediaTypeOrDefault(header textproto.MIMEHeader) string {
mediaType, _, err := mime.ParseMediaType(header.Get("Content-Type"))
if err != nil {
return "application/octet-stream"
}
return mediaType
}
示例2: checkContentType
func checkContentType(h textproto.MIMEHeader, expected string) error {
ctype := h.Get("Content-Type")
if ctype != expected {
return errors.Errorf("expected Content-Type %q, got %q", expected, ctype)
}
return nil
}
示例3: Date
// Date parses the Date header field.
func Date(h textproto.MIMEHeader) (time.Time, error) {
hdr := h.Get("Date")
if hdr == "" {
return time.Time{}, ErrHeaderNotPresent
}
return parseDate(hdr)
}
示例4: newEntity
func newEntity(h textproto.MIMEHeader, r io.Reader, shared *sharedData) (*Entity, error) {
contType := h.Get("Content-Type")
if contType == "" {
return &Entity{
Header: h,
body: &SinglepartBody{Reader: r},
shared: shared,
}, nil
}
mediaType, params, err := mime.ParseMediaType(contType)
if err != nil {
return nil, err
}
if !strings.HasPrefix(mediaType, "multipart/") {
return &Entity{
Header: h,
body: &SinglepartBody{Reader: r},
shared: shared,
}, nil
}
boundary, ok := params["boundary"]
if !ok {
return nil, fmt.Errorf("Boundary not found in Content-Type field: %v", contType)
}
return &Entity{
Header: h,
body: &MultipartBody{multipart.NewReader(r, boundary)},
shared: shared,
}, nil
}
示例5: handleEventMsg
//handleEventMsg processes event messages received from Freeswitch.
func (client *Client) handleEventMsg(resp textproto.MIMEHeader) error {
event := make(map[string]string)
//Check that Content-Length is numeric.
_, err := strconv.Atoi(resp.Get("Content-Length"))
if err != nil {
log.Print(logPrefix, "Invalid Content-Length", err)
return err
}
for {
//Read each line of the event and store into map.
line, err := client.eventConn.ReadLine()
if err != nil {
log.Print(logPrefix, "Event Read failure: ", err)
return err
}
if line == "" { //Empty line means end of event.
client.sendEvent(event)
return err
}
parts := strings.Split(line, ": ") //Split "Key: value"
key := parts[0]
value, err := url.QueryUnescape(parts[1])
if err != nil {
log.Print(logPrefix, "Parse failure: ", err)
return err
}
event[key] = value
}
}
示例6: parseMIMEParts
// parseMIMEParts will recursively walk a MIME entity and return a []mime.Part containing
// each (flattened) mime.Part found.
// It is important to note that there are no limits to the number of recursions, so be
// careful when parsing unknown MIME structures!
func parseMIMEParts(hs textproto.MIMEHeader, b io.Reader) ([]*part, error) {
var ps []*part
// If no content type is given, set it to the default
if _, ok := hs["Content-Type"]; !ok {
hs.Set("Content-Type", defaultContentType)
}
ct, params, err := mime.ParseMediaType(hs.Get("Content-Type"))
if err != nil {
return ps, err
}
// If it's a multipart email, recursively parse the parts
if strings.HasPrefix(ct, "multipart/") {
if _, ok := params["boundary"]; !ok {
return ps, ErrMissingBoundary
}
mr := multipart.NewReader(b, params["boundary"])
for {
var buf bytes.Buffer
p, err := mr.NextPart()
if err == io.EOF {
break
}
if err != nil {
return ps, err
}
if _, ok := p.Header["Content-Type"]; !ok {
p.Header.Set("Content-Type", defaultContentType)
}
subct, _, err := mime.ParseMediaType(p.Header.Get("Content-Type"))
if strings.HasPrefix(subct, "multipart/") {
sps, err := parseMIMEParts(p.Header, p)
if err != nil {
return ps, err
}
ps = append(ps, sps...)
} else {
// Otherwise, just append the part to the list
// Copy the part data into the buffer
if _, err := io.Copy(&buf, p); err != nil {
return ps, err
}
ps = append(ps, &part{body: buf.Bytes(), header: p.Header})
}
}
} else {
// If it is not a multipart email, parse the body content as a single "part"
var buf bytes.Buffer
if _, err := io.Copy(&buf, b); err != nil {
return ps, err
}
ps = append(ps, &part{body: buf.Bytes(), header: hs})
}
return ps, nil
}
示例7: handleAPIMsg
//handleAPIMsg processes API response messages received from Freeswitch.
func (client *Client) handleAPIMsg(resp textproto.MIMEHeader) error {
//Check that Content-Length is numeric.
length, err := strconv.Atoi(resp.Get("Content-Length"))
if err != nil {
log.Print(logPrefix, "Invalid Content-Length", err)
client.sendCmdRes(cmdRes{body: "", err: err}, true)
return err
}
//Read Content-Length bytes into a buffer and convert to string.
buf := make([]byte, length)
if _, err = io.ReadFull(client.eventConn.R, buf); err != nil {
log.Print(logPrefix, "API Read failure: ", err)
}
client.sendCmdRes(cmdRes{body: string(buf), err: err}, true)
return err
}
示例8: TestSubjectHeaderWithExistingQuotes
func TestSubjectHeaderWithExistingQuotes(t *testing.T) {
m := simpleMessage()
m.Subject = `"Hi World"`
buf := new(bytes.Buffer)
header := textproto.MIMEHeader{}
_, err := m.bytes(buf, header)
if err != nil {
t.Log(err)
t.Fail()
}
expected := `\"Hi World\"`
if sub := header.Get("Subject"); sub != expected {
t.Logf(`Expected Subject to be "%s" but got "%s"`, expected, sub)
t.Fail()
}
}
示例9: storeMessage
// store message, unpack attachments, register with daemon, send to daemon for federation
// in that order
func (self *nntpConnection) storeMessage(daemon *NNTPDaemon, hdr textproto.MIMEHeader, body io.Reader) (err error) {
var f io.WriteCloser
msgid := getMessageID(hdr)
if msgid == "" {
// drop, invalid header
log.Println(self.name, "dropping message with invalid mime header, no message-id")
_, err = io.Copy(Discard, body)
return
} else if ValidMessageID(msgid) {
f = daemon.store.CreateFile(msgid)
} else {
// invalid message-id
log.Println(self.name, "dropping message with invalid message-id", msgid)
_, err = io.Copy(Discard, body)
return
}
if f == nil {
// could not open file, probably already storing it from another connection
log.Println(self.name, "discarding duplicate message")
_, err = io.Copy(Discard, body)
return
}
path := hdr.Get("Path")
hdr.Set("Path", daemon.instance_name+"!"+path)
// now store attachments and article
err = writeMIMEHeader(f, hdr)
if err == nil {
err = daemon.store.ProcessMessageBody(f, hdr, body)
if err == nil {
// tell daemon
daemon.loadFromInfeed(msgid)
}
}
f.Close()
if err != nil {
// clean up
if ValidMessageID(msgid) {
DelFile(daemon.store.GetFilename(msgid))
}
}
return
}
示例10: getMessageID
// get a message id from a mime header
// checks many values
func getMessageID(hdr textproto.MIMEHeader) (msgid string) {
msgid = hdr.Get("Message-Id")
if msgid == "" {
msgid = hdr.Get("Message-ID")
}
if msgid == "" {
msgid = hdr.Get("message-id")
}
if msgid == "" {
msgid = hdr.Get("MESSAGE-ID")
}
return
}
示例11: readPlainText
// Read body from text/plain
func readPlainText(header textproto.MIMEHeader, body io.Reader) (mailbody []byte, err error) {
contentType := header.Get("Content-Type")
encoding := header.Get("Content-Transfer-Encoding")
_, params, err := mime.ParseMediaType(contentType)
if encoding == ENC_QUOTED_PRINTABLE {
if strings.ToLower(params["charset"]) == CHARSET_ISO2022JP {
mailbody, err = ioutil.ReadAll(transform.NewReader(quotedprintable.NewReader(body), japanese.ISO2022JP.NewDecoder()))
} else {
mailbody, err = ioutil.ReadAll(quotedprintable.NewReader(body))
}
} else if encoding == ENC_BASE64 {
mailbody, err = ioutil.ReadAll(base64.NewDecoder(base64.StdEncoding, body))
} else if len(contentType) == 0 || strings.ToLower(params["charset"]) == CHARSET_ISO2022JP {
// charset=ISO-2022-JP
mailbody, err = ioutil.ReadAll(transform.NewReader(body, japanese.ISO2022JP.NewDecoder()))
} else {
// encoding = 8bit or 7bit
mailbody, err = ioutil.ReadAll(body)
}
return mailbody, err
}
示例12: parseMIMEParts
// parseMIMEParts will recursively walk a MIME entity and return a []mime.Part containing
// each (flattened) mime.Part found.
// It is important to note that there are no limits to the number of recursions, so be
// careful when parsing unknown MIME structures!
func parseMIMEParts(hs textproto.MIMEHeader, b io.Reader) ([]*part, error) {
var ps []*part
ct, params, err := mime.ParseMediaType(hs.Get("Content-Type"))
if err != nil {
return ps, err
}
if strings.HasPrefix(ct, "multipart/") {
if _, ok := params["boundary"]; !ok {
return ps, ErrMissingBoundary
}
mr := multipart.NewReader(b, params["boundary"])
for {
var buf bytes.Buffer
p, err := mr.NextPart()
if err == io.EOF {
break
}
if err != nil {
return ps, err
}
subct, _, err := mime.ParseMediaType(p.Header.Get("Content-Type"))
if strings.HasPrefix(subct, "multipart/") {
sps, err := parseMIMEParts(p.Header, p)
if err != nil {
return ps, err
}
ps = append(ps, sps...)
} else {
// Otherwise, just append the part to the list
// Copy the part data into the buffer
if _, err := io.Copy(&buf, p); err != nil {
return ps, err
}
ps = append(ps, &part{body: buf.Bytes(), header: p.Header})
}
}
}
return ps, nil
}
示例13: AddressList
// AddressList parses the named header field as a list of addresses.
func AddressList(header textproto.MIMEHeader, key string, utf8ReaderFactory UTF8ReaderFactory) (r []*Address, err error) {
// h := make(map[string][]string)
// vals := header[key]
// if vals == nil {
// return
// }
// var newDecodedVals []string
// for _, val := range vals {
// var newVal string
// newVal, err = DecodeText(val, utf8ReaderFactory)
// if err != nil {
// return
// }
// newDecodedVals = append(newDecodedVals, newVal)
// }
// h[key] = newDecodedVals
hdr := header.Get(key)
if hdr == "" {
return nil, ErrHeaderNotPresent
}
return newAddrParser(hdr, utf8ReaderFactory).parseAddressList()
}
示例14: newEvent
//newEvent build event
func newEvent(data *textproto.MIMEHeader) (*AMIEvent, error) {
if data.Get("Event") == "" {
return nil, errNotEvent
}
ev := &AMIEvent{data.Get("Event"), strings.Split(data.Get("Privilege"), ","), make(map[string]string)}
for k, v := range *data {
if k == "Event" || k == "Privilege" {
continue
}
ev.Params[k] = v[0]
}
return ev, nil
}
示例15: newResponse
//newResponse build a response for action
func newResponse(data *textproto.MIMEHeader) (*AMIResponse, error) {
if data.Get("Response") == "" {
return nil, errors.New("Not Response")
}
response := &AMIResponse{"", "", make(map[string]string)}
for k, v := range *data {
if k == "Response" {
continue
}
response.Params[k] = v[0]
}
response.ID = data.Get("Actionid")
response.Status = data.Get("Response")
return response, nil
}